1. 程式人生 > >linux 守護程序與用&結尾的後臺執行程式有什麼區別

linux 守護程序與用&結尾的後臺執行程式有什麼區別

預設情況下,程序是在前臺執行的,這時就把shell給佔據了,我們無法進行其它操作。對於那些沒有互動的程序,很多時候,我們希望將其在後臺啟動,可以在啟動引數的時候加一個’&'實現這個目的:

[email protected]:~/application/zookeeper-3.4.8/bin$Misplaced & ./zkServer.sh start &
[1] 21304
[email protected]:~/application/zookeeper-3.4.8/bin$ ZooKeeper JMX enabled by default
Using config: /home/zsm/application/zookeeper-3.4.8/bin/..
/conf/zoo.cfg Starting zookeeper ... STARTED [1]+ Done ./zkServer.sh start

切換到後臺的程序稱為job。切換到後臺時會輸出相關job資訊,以前面的輸出[1] 21304為例:[1]表示job ID,21304表示程序ID是21304。 切換到後臺的程序,仍然可以用ps命令檢視,或通過jobs命令只檢視所有job(後臺程序)。

後臺程序會隨著Shell的退出而結束。

最大的區別有幾點:
(a)守護程序已經完全脫離終端控制檯了,而後臺程式並未完全脫離終端,在終端未關閉前還是會往終端輸出結果
(b)守護程序在關閉終端控制檯時不會受影響,而後臺程式會隨使用者退出而停止,需要在以nohup command & 格式執行才能避免影響
©守護程序的會話組和當前目錄,檔案描述符都是獨立的。後臺執行只是終端進行了一次fork,讓程式在後臺執行,這些都沒改變。

如何檢視守護程序:

ps -axj  

-a表示顯示由其他使用者所擁有的程序的狀態
-x顯示沒有控制終端的程序狀態

-j顯示與作業有關的資訊:會話ID、程序組ID等

如何編寫守護程序:

可參考《unix環境高階程式設計》

第13章 守護程序

如何使普通程序達到守護程序的部分效果:

nohup ./a.out &  

1.nohup

用途:不掛斷地執行命令,即使終端ssh關閉了也一直執行。

語法:nohup Command [ Arg … ][ & ]

例:nohup start.sh &

無論是否將 nohup 命令的輸出重定向到終端,輸出都將附加到當前目錄的 nohup.out 檔案中。nohup.out相對於日誌

如果當前目錄的 nohup.out 檔案不可寫,輸出重定向到 $HOME/nohup.out 檔案中。

如果沒有檔案能建立或開啟以用於追加,那麼 Command 引數指定的命令不可呼叫。

2.&

用途:在後臺執行,當關閉了ssh終端,程式也會關閉

一般這種程式使用 & 結尾,但是如果終端關閉,那麼程式也會被關閉。

    例: start.sh &

3.ps -aux

ps -aux 可以檢視程序,

kill -9 程序號 然後殺死此程序


來源:CSDN
原文:https://blog.csdn.net/pursuer211/article/details/78932394