Nohup
為什麼使用“nohup &”而不是“exec &”
我知道,
nohup
作為二進製文件,它可以從任何 shell 訪問。但是exec
內置的可能存在於每個外殼中。是否有理由更喜歡其中一個而不是另一個?
什麼更好,一條魚還是一輛自行車?
nohup
並exec
做不同的事情。
exec
用另一個程序替換 shell。exec
在簡單的後台作業中使用沒有用:exec myprogram; more stuff
將 shell 替換為myprogram
and so doesn’t runmore 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 &