shell退出後後台程序保持運行
在liunx上,如果想讓一個進程在後台運行,最直接的方法是用&符號.
比如ping www.baidu.com &
但是這樣一來,這個進程便成為了當前shell的一個job,在shell退出時,job會收到一個信號,也隨之停止.
處理這個問題,可以使用nohup命令,讓job忽略shell的退出信號,也可以采用其他方式.
既然後台命令作為shell的子進程會在shell退出時被殺掉,那麼只要不讓後台命令作為shell的子進程即可.比較簡單的方式是利用subshell來調用後台命令.
比如寫個start.sh
#!/bin/bash
ping www.baidu.com &
然後在shell中調用start.sh.
./start.sh
我猜測雖然start.sh是ping命令的父進程,但是start.sh運行完畢就退出了,ping命令成了孤兒進程,會被init進程收養.所以退出shell也不會導致ping命令中斷