1. 程式人生 > >讓進程在後臺運行

讓進程在後臺運行

color works 執行 div mman hup amp 能夠 and

執行一個比較耗時的命令,由於網絡不穩定導致回話斷開,命令別中斷

如果讓一個命令在後臺穩定運行?

原理:

用戶註銷或網絡斷開時,終端會收到 hup(hangup)信號,從而關閉所有子進程。

解決辦法

1、讓進程忽略 HUP 信號

2、讓進程運行在新的會話裏

方法1:

nohup 的用途就是讓提交的命令忽略 hangup 信號

nohup command &>log.txt &  #此時 ppid 為 1 (init進程)

方法2:

screen : screen 提供了 ANSI/VT100 的終端模擬器,使它能夠在一個真實終端下運行多個全屏的偽終端

#建立一個處於斷開模式下的會話(並指定其會話名)
screen -dmS session name

#來列出所有會話
用screen -list

#重新連接指定會話
screen -r session name

#斷開會話
CTRL-a d

在screen中 exit 則中斷該screen

技術分享

此時 bash 是 screen 的子進程,而 screen 是 init(PID為1)的子進程。那麽當 ssh 斷開連接時,HUP 信號自然不會影響到 screen 下面的子進程了

參考 :https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/

註意:該文中其他方式在腳本有輸出的時候並未測試通過!

讓進程在後臺運行