1最近寫了乙個關於守護程序的**,大概步驟有下面幾步:
1建立子程序,父程序退出。
2在子程序中建立新會話。
3改變當前目錄為根目錄
4重設檔案許可權掩碼
5關閉檔案描述符
12 13
14 剛剛開始的時候對第二個步驟和第三個步驟不是很理解,假如你也遇到這樣問題先去看一下關於程序組和會話的概念,以及守護程序理解會很快。
15 16
17 18 pid = fork();
19 20 if(pid>0) exit(0);/*creat a child process ,and the parent process exit */
21 22 setsid();/*通過呼叫此函式可以使得剛剛建立的子程序,脫離終端控制,同時建立次年的程序組,而次程序就會成為該程序組的首程序。會話中的程序通過該會話中的領頭程序(控制程序
)與乙個終端相連。該終端是會話的控制終端。乙個會話只能有乙個控制終端,但是守護程序是沒有控制終端的。如果會話存在乙個控制終端,則它必然擁有乙個前台程序組。屬於該組的》 程序可以從終端終端獲得輸入。這時,其他的程序組都為後台程序。
23 由於守護程序沒有控制終端,而使用fork()函式建立的子程序繼承了父程序的控制終端、會話和程序組,因此,必須建立新的會話,以脫離父程序的影響。
24 setsid()函式將建立新的會話,並使得呼叫setsid()函式的程序成為新會話的領頭程序。這樣你在終端傳送的訊號他就不會收到,*/
25 26 chdir("/");/*更改工作目錄,子程序父程序的*/
27 28 umask(0);//重新設定檔案許可權
29 30 for(i = 0; i < getdtablesize(); i++)//關閉檔案描述符 gettablesize 用來獲得檔案的最大描述符
31 32 {
33 34 close(i);
平時經常用的是vi 所以會有行號,不會影響閱讀,不刪除了
Linux 系統 關於守護程序
常駐程序,其實就是守護程序。在某家公司工作期間,會使用它來作為需要保活執行的機制,用以維護消費者程序。但當時對於守護程序的理解還是不夠深入,所以現在再把這塊做個整理,並結合當時遇到的乙個問題例項進行分析。注 下面內容都針對linux作業系統。mac上的launchd與systemd作用相同,而且據說...
守護程序之守護程序的慣例
在unix系統中,守護程序遵循下列公共慣例 例項 程式清單13 3所示程式說明了守護程序可以重讀其配置檔案的一種方法。該程式使用sigwait以及多執行緒 可參考 程式清單13 3 守護程序重讀配置檔案 include apue.h include include sigset t mask ext...
守護程序及守護程序輸出
1 建立乙個輸出程式 2 建立乙個守護程序 1 建立乙個輸出程式 守護程序不與終端聯絡,所以,需要另外建立乙個程式用於輸出。也可以直接使用 bin echo example daemon help.cc include int main int argc,char argv else if argc...