linux後臺運行程序

菜鳥開始時不懂窗口關閉時,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

nohup /usr/local/node/bin/node /www/im/chat.js >> /usr/local/node/output.log 2>&1 &

進程號7585

查看運行的後臺進程

(1)jobs -l

jobs命令只看當前終端生效的,關閉終端後,在另一個終端jobs已經無法看到後臺跑得程序了,此時利用ps(進程查看命令)

(2)ps -ef 

1

ps -aux|grep chat.js

 a:顯示所有程序 
 u:以用戶爲主的格式來顯示 
 x:顯示所有程序,不以終端機來區分
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章