自己創建守護進程

        創建守護進程有兩種方式,一種是通過系統提供的函數實現,另一種是模仿函數的底層實現。

(一)自己創建

1.調用umask將文件模式創建屏蔽字設置爲0

2.調用fork,並且父進程退出

3.調用setsid創建一個新的會話

4.將當前工作目錄改成根目錄。

5.關閉不再需要的文件描述符。

6.其他:忽略SIGCHLD信號

以下是自己寫的守護進程:

運行結果如下:




二)調用函數的方法

#include <stdio.h>
#include<unistd.h>
int main()
{
daemon(0,0);
while(1);
}

三)關於有時候創建守護進程需要兩次fork的原因

1 、第一次fork的作用是讓shell 認爲本條命令 已經終止,不用掛在終端輸入上。還有一個作用是爲後面setsid服務。setsid的調用者不能是進程組組長(group leader). 此時父進程是進程組組長。

2、第2次fork不是必須的。也看到很多開源服務沒有fork第二次。fork第二次主要目的是。防止進程再次打開一個控制終端。因爲打開一個控制終端的前臺條件是該進程必須是會話組長。再fork一次,子進程ID != sid(sid是進程父進程的sid)。所以也無法打開新的控制終端。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章