linux直接運行某個進程,在當前命令結束後,或者關閉掉shell窗口該進程會結束。
如何在後台運行某個進程
方法1
使用nohup命令,nohup命令本身的意思是no hung up表示不會收到shell的關閉,關閉掉進程。
使用nohup command &使得命令可以在後台運行,通過job -l可以看到後台運行的情況。
這裡比較坑的地方是如果直接關閉掉shell,shell也會關閉掉這個後台的命令,退出shell需要先通過命令 exit然後在關閉才能在後台運行
方法2
利用腳本在後台運行,比如我要運行 mongod --dbpath="abc"啟動mongodb。
先寫一個腳本test.sh,裡面內容可以是
#!/bin/sh
mongod --dbpath="abc"啟動mongodb &
#這裡&很重要,否則無法退出當前命令。
然後直接運行test.sh。這個時候mongodb已經啟動並運行了關閉shell也不會停止,問題來了,為什麼會這樣,網絡上有人解釋為
使用test.sh運行會立即結束,mongodb通過&號表示在後台運行,test.sh運行的父進程是當前shell進行,(查看shell進程號可以通過echo $$查看),test.sh運行結束,但是mongod卻不會運行結束,test.sh會很負責的將mongod托管給系統init進程,通過ps -ef|grep mongod可以看到mongod的父進程是1。
方法3
通過setsid直接將mongod的父進程設置為init進程
setsid mongod --dbpath="abc"啟動mongodb ,查看mongod進程發現其父進程是1.
參考文獻:http://www.cnblogs.com/lwm-1988/archive/2011/08/20/2147299.html