Nohup

將 nohup 重定向到標準輸出

  • May 30, 2020

是否可以讓程序以 nohup 啟動,寫入標準輸出而不是文件?或者可能在文件和螢幕上?

nohup python start.py &

寫入nohup.out,但我希望它輸出到螢幕, nohup 僅在連接中斷時用作對沖。

您可以通過單獨的過程來檢查文件,或使用終端多路復用器(如screenor )來實現此目的tmux

  1. nohup python start.py & tail -f nohup.out

tail -f可以隨意殺死重啟,不影響python程序。

  1. 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 結束時殺死它。

引用自:https://serverfault.com/questions/414341