Nohup

為什麼使用“nohup &”而不是“exec &”

  • May 14, 2018

我知道,nohup作為二進製文件,它可以從任何 shell 訪問。但是exec內置的可能存在於每個外殼中。

是否有理由更喜歡其中一個而不是另一個?

什麼更好,一條魚還是一輛自行車?nohupexec做不同的事情。

exec用另一個程序替換 shell。exec在簡單的後台作業中使用沒有用:exec myprogram; more stuff將 shell 替換為myprogramand so doesn’t run more stuff,這與myprogram; more stuff終止時more stuff執行的不同;myprogram但是在後台exec myprogram & more stuff啟動myprogram然後執行more stuff,就像myprogram & more stuff.

nohup在忽略 SIGHUP 信號的情況下執行指定的程序。當一個終端關閉時,核心會發送 SIGHUP 到該終端(即 shell)中的控制程序。shell 依次向後台執行的所有作業發送 SIGHUP。nohup如果終端死了(例如,如果您遠端登錄並且連接斷開,或者如果您關閉終端仿真器,則會發生這種情況),執行作業可以防止它以這種方式被殺死。

nohup還將程序的輸出重定向到文件nohup.out. 這可以避免程序因無法寫入其輸出或錯誤輸出而死亡。請注意,nohup這不會重定向輸入。要完全斷開程序與您啟動它的終端的連接,請使用

nohup myprogram </dev/null >myprogram.log 2>&1 &

引用自:https://unix.stackexchange.com/questions/137759