標籤:

什麼是守護進程?


個人理解守護進程和普通進程區別是指:將後台程序變成一種服務,比如說,用命令行輸入啟動程序,如果不是守護進程的話,一旦命令行窗口關閉,程序就終止了;而如果啟動守護進程,則退出命令行窗口之後,服務一直處於運行狀態。


 守護進程是在後台運行不受終端控制的進程(如輸入、輸出等),一般的網路服務都是以守護進程的方式運行。守護進程脫離終端的主要原因有兩點:(1)用來啟動守護進程的終端在啟動守護進程之後,需要執行其他任務。(2)(如其他用戶登錄該終端後,以前的守護進程的錯誤信息不應出現)由終端上的一些鍵所產生的信號(如中斷信號),不應對以前從該終端上啟動的任何守護進程造成影響。要注意守護進程與後台運行程序(即加&啟動的程序)的區別。

創建守護進程的過程:

1. 調用fork創建子進程。父進程終止,讓子進程在後台繼續執行。

2. 子進程調用setsid產生新會話期並失去控制終端調用setsid()使子進程進程成為新會話組長和新的進程組長,同時失去控制終端。

3. 忽略SIGHUP信號。會話組長進程終止會向其他進程發該信號,造成其他進程終止。

4. 調用fork再創建子進程。子進程終止,子子進程繼續執行,由於子子進程不再是會話組長,從而禁止進程重新打開控制終端。

5. 改變當前工作目錄為根目錄。一般將工作目錄改變到根目錄,這樣進程的啟動目錄也可以被卸掉。

6. 關閉打開的文件描述符,打開一個空設備,並複製到標準輸出和標準錯誤上。 避免調用的一些庫函數依然向屏幕輸出信息。

7. 重設文件創建掩碼清除從父進程那裡繼承來的文件創建掩碼,設為0。

8. 用openlog函數建立與syslogd的連接。


守護進程程序的名稱通常以字母「d」結尾:例如,syslogd就是指管理系統日誌的守護進程。


推薦閱讀:

安裝 Ubuntu 系統時,硬碟分區識別不正確,無法繼續安裝,請問是哪裡的問題?
如何評價 Manjaro ?

TAG:Ubuntu |