守護程序的程式設計規則

2021-06-21 16:09:49 字數 865 閱讀 7561

要理解守護程序的程式設計規則必須先搞明白程序組、會話、組長程序等關係。

1.程序組

每個程序除了有乙個程序id之外,還屬於乙個程序組。程序組是乙個或者多個程序的集合。每個程序組都有乙個組長程序。組長程序的標識是,其程序id和程序組id相等。

2.會話

會話是乙個或者多個程序組的集合。

程序可以呼叫setsid(void)建立乙個新會話,如果呼叫此函式的程序不是乙個程序組的組長,則此函式就會建立乙個新會話,結果將發生下面三件事:

1)該程序程式設計新會話的首程序(會話首程序是建立該會話的程序),此時,該程序是新會話中的唯一程序。

2)該程序成為乙個新程序組的組長程序,新程序組的id是該呼叫程序的程序id

3)該程序沒有控制終端。如果在呼叫setsid之前有控制終端,這種聯絡也會中斷。這剛好滿足守護程序的規則,我們可以預想到,要編寫守護程序需要呼叫setsid。

注意,如果該呼叫程序本身是程序組的組長,呼叫setsid返回錯誤。為了不保證發生這種情況,通常先fork,然後使其父程序終止,而子程序則繼續。

3.守護程序的程式設計規則

(1)呼叫umask將檔案模式建立遮蔽字設定為0

(2)呼叫fork,父程序退出,然後呼叫setsid()

(3)將工作目錄改為根目錄。從父程序繼承來的當前工作目錄可能在乙個裝配檔案系統中,因為守護程序通常在系統再引導之前是一直存在的,所以如果守護程序的當前工作目錄在乙個裝配檔案系統中,那麼該檔案系統不能被解除安裝,這與裝配檔案系統的原意不符。

(4)關閉需要的檔案描述符。這使得守護程序不再持有從其父程序繼承而來的檔案描述符,可以使用open_max()或者getrlimit()來判定最高檔案描述符的值,並關閉所有到該值的描述符

(5)重定向標準輸入、輸出、錯誤輸出

守護程序之程式設計規則

在編寫守護程序時需遵循一些基本規則,以便防止產生並不需要的互動作用。下面先說明這些規則,然後給出乙個按照這些規則編寫的函式daemonize。1 首先要做的是呼叫umask將檔案模式建立遮蔽字設定為0。由繼承得來的檔案模式建立遮蔽字可能會拒絕設定某些許可權。例如,若守護程序要建立乙個組可讀 寫的檔案...

守護程序之程式設計規則

在編寫守護程序時需遵循一些基本規則,以便防止產生並不需要的互動作用。下面先說明這些規則,然後給出乙個按照這些規則編寫的函式daemonize。1 首先要做的是呼叫umask將檔案模式建立遮蔽字設定為0。由繼承得來的檔案模式建立遮蔽字可能會拒絕設定某些許可權。例如,若守護程序要建立乙個組可讀 寫的檔案...

守護程序程式設計規則(UNIX環境高階程式設計筆記)

1 呼叫umask將檔案模式建立遮蔽字設定為乙個已知值。2 呼叫fork,然後使父程序exit。3 呼叫setsid建立乙個新會話。然後使呼叫程序 a 稱為新會話的首程序,b 成為乙個新程序組的組長程序,c 沒有控制終端。4 將當前工作目錄更改為根目錄。某些守護程序可能會把當前工作目錄更改到某個指定...