菜鳥開始時不懂窗口關閉時,jobs程序也被關閉,原因當然是SIGHUP信號。下面分析SIGHUP信號的特點,以及如何使得程序不被關閉。
SIGHUP信號
SIGHUP是unix中進程組織結構爲 session 包含一個前臺進程組及一個或多個後臺進程組,一個進程組包含多個進程。
一個session可能會有一個session首進程,而一個session首進程可能會有一個控制終端。
一個進程組可能會有一個進程組首進程。進程組首進程的進程ID與該進程組ID相等。
SIGHUP會在以下3種情況下被髮送給相應的進程:
1、終端關閉時,該信號被髮送到session首進程以及作爲job提交的進程(即用 & 符號提交的進程)
2、session首進程退出時,該信號被髮送到該session中的前臺進程組和後臺進程組中的每一個進程
3、若進程的退出,導致一個進程組變成了孤兒進程組,且新出現的孤兒進程組中有進程處於停止狀態,則SIGHUP和SIGCONT信號會按順序先後發送到新孤兒進程組中的每一個進程。
系統對SIGHUP信號的默認處理是終止收到該信號的進程。所以若程序中沒有捕捉該信號,當收到該信號時,進程就會退出。
兩種方法
方法一: Screen
使用例子https://www.ibm.com/developerworks/cn/linux/l-cn-screen/
方法二: nohup
用途:不掛斷地運行命令。
語法:nohup Command [ Arg … ] [ & ]
無論是否將 nohup 命令的輸出重定向到終端,輸出都將附加到當前目錄的 nohup.out 文件中。
如果當前目錄的 nohup.out 文件不可寫,輸出重定向到 $HOME/nohup.out 文件中。
如果沒有文件能創建或打開以用於追加,那麼 Command 參數指定的命令不可調用。
退出狀態:該命令返回下列出口值:
126 可以查找但不能調用 Command 參數指定的命令。
127 nohup 命令發生錯誤或不能查找由 Command 參數指定的命令。
否則,nohup 命令的退出狀態是 Command 參數指定命令的退出狀態。
&
用途:在後臺運行
一般兩個一起用
nohup command &
eg:
1 |
|
進程號7585
查看運行的後臺進程
(1)jobs -l
jobs命令只看當前終端生效的,關閉終端後,在另一個終端jobs已經無法看到後臺跑得程序了,此時利用ps(進程查看命令)
(2)ps -ef
1 |
|
a:顯示所有程序
u:以用戶爲主的格式來顯示
x:顯示所有程序,不以終端機來區分