linux 守護進程編寫規則
(1)首先要做的是調用umask將文件模式創建屏蔽字設置為0.由繼承得來的文件模式創建屏蔽字可能會拒絕設置某些權限。
(2)調用fork,然后使父進程退出(exit).這樣做實現了下面幾點:第一,如果該守護進程是作為一條簡單shell命令啟動的,那么父進程終止使得shell認為這條命令已經執行完畢。第二,子進程繼承了父進程的進程組ID,但具有一個新的進程ID,這就保證了子進程不是一個進程組的組長進程。這對于下面就要做的setsid調用是必要的前提條件。
(3)調用setsid以創建一個新會話,是調用進程:(a)成為新會話的首進程,(b)成為一個新進程組的組長進程,(c)沒有控制終端。在有些人建議在此時再次調用 fork,并是父進程終止。第二個子進程作為守護進程繼續運行。這樣就保證了該守護進程不是會話首進程。
(4)將當前工作目錄更改為根目錄。
(5)關閉不再需要的文件描述符。這使守護進程不再持有從其父進程繼承來的某些文件描述符。
(6)某些守護進程打開/dev/null使其具有文件描述符0,1,2.這樣,任何一個試圖讀標準輸入,寫標準輸出或標準出錯的庫例程都不會產生任何效果。
參考:UNIX環境高級編程