原文:Keep Long Running UNIX Commands Alive
需求:你有一個程序要運行很長時間,你希望即使自己退出SSH連接,它也不會被殺死,而是運行到它自己結束。
我知道三種方法來保持進程:
nohup
,
disown
和
tmux
。
最簡單的方法: nohup
當你退出終端時,終端會向它的所有子進程發送掛起信號,這會結束掉它們。 而
nohup
能通知進程忽略掛起信號。
為了保持進程
[code]$ nohup <the command> &
默認情況下
nohup
會將標准輸出和標准錯誤重定向到當前目錄下的nohup.out文件。
這時,即使你退出終端,進程也不會被結束。你可以重新登入並
tail
nohup.out文件,你會發現它仍在運行。
不好,我忘了用nohup啟動:disown
如果你忘了用
nohup
啟動,不必擔心,
disown
會是你的朋友。唯一的缺點是你將不能重定向標准輸出。
為了保持你已啟動的進程,首先你需要暫停它,然後讓它在後台運行起來,最後
disown
即可:
[code]# press Ctrl+Z to suspend the program
$ bg
$ disown
現在可以放心地退出終端了。
復雜方法:tmux
略