將 nohup 重定向到標準輸出
是否可以讓程序以 nohup 啟動,寫入標準輸出而不是文件?或者可能在文件和螢幕上?
nohup python start.py &
寫入
nohup.out
,但我希望它輸出到螢幕, nohup 僅在連接中斷時用作對沖。
您可以通過單獨的過程來檢查文件,或使用終端多路復用器(如
screen
or )來實現此目的tmux
。
nohup python start.py & tail -f nohup.out
tail -f
可以隨意殺死重啟,不影響python程序。
screen python start.py
並隨意斷開/重新連接。
來自
man nohup
:如果標準輸入是終端,則將其從 /dev/null 重定向。如果標準輸出是終端,
nohup.out
則盡可能將輸出附加到,$HOME/nohup.out
否則。如果標準錯誤是終端,則將其重定向到標準輸出。要將輸出保存到 FILE,請使用nohup COMMAND > FILE
.(根據評論完全修改)
當退出shell或關閉終端時,子程序將被發送SIGHUP(掛斷,名稱來源於終端撥入UNIX電腦的時間)告訴他們終端沒有更長的連接。此外,當 shell 程序結束時,子程序的 stdin、stdout 和 stderr 流將被關閉。通常這會導致子程序死亡。通常這是一件好事,因為它避免了讓程序在沒有使用者的情況下執行。
該
nohup
程序的目的是即使在 shell 終止並且終端斷開連接後也能保持程序執行。因此,將其輸出定向到終端完全違背了目的。我最初的答案 (nohup COMMAND | cat
) 沒有幫助,因為:當終端關閉時,cat 的輸出關閉,因此 cat 死亡,這會破壞管道並將 SIGPIPE 發送到 nohup 程序導致它死亡。我沒有考慮目的就回答了這個問題。為了達到您的目的,執行
nohup COMMAND > FILE
選擇要直接輸出到的文件的名稱。然後用於tail -f FILE
查看終端上的輸出。類似地,可以使用以下 shell 構造:
COMMAND >FILE 2>&1 </dev/null &
執行其 stdio 流未連接到終端並且可以在終端關閉後繼續執行的命令。此外,在 zsh 中,執行 shell-builtindisown
來告訴 zsh 離開程序而不是在 shell 結束時殺死它。