#include #include #include #include #include #include //自定義守護程式
int mydaemon()
else if (pid < 0)//出現錯誤
//2.設定檔案的掩碼(子程序中)
umask(0);
//3.設定新的會話:脫離當前會話和終端的控制
if (setsid() < 0)
//4.改變當前的工作目錄
if (chdir("/") < 0)
//5.關閉標準輸入、標準輸出、標準錯誤
close(stdin_fileno);
close(stdout_fileno);
close(stderr_fileno);
//6.重定向標準輸入(0)、標準輸出(1)、標準錯誤(2)
open("/dev/null", o_rdonly);//0
open("/dev/null", o_rdwr);//1
open("/dev/null", o_rdwr);//2
return 0;
}int main()
其上的chdir函式,用作改變工作目錄,若成功返回0, 失敗則返回-1
setsid函式用作設定新會話,若成功返回新的會話的id, 失敗則返回-1
也可用系統自帶的daemon函式實現守護程序,daemon函式原型為: int daemon (int nochdir, int noclose);
引數nochdir (填引數時讓使用者選擇是否要改變目錄,填0 則改變目錄置根目錄(「/」)下)
引數noclose (填引數時讓使用者選擇是否要重定向標準輸入、標準輸出、標準錯誤, 填0 則重定向到/dev/null)
呼叫函式是引數填為 daemon(0, 0);
守護程序的實現
6個步驟 步驟1 建立子程序,殺死父程序,目的是為了步驟2中呼叫setsid可以成功。步驟2 建立新會話,並自任組長。目的是脫離控制終端 會話組長呼叫 setsid 會失敗,步驟1建立的子程序必然不是會話組長,這就保證了 setsid 可以成功。步驟3 修改工作目錄為根目錄。當程序沒有結束時,工作目...
實現守護程序
目錄守護程序 也稱為精靈程序,守護程序是乙個在後台執行並且不受任何終端控制的程序。unix作業系統有很多典型的守護程序 其數目根據需要或20 50不等 它們在後台執行,執行不同的管理任務。使用者使守護程序獨立於所有終端是因為,在守護程序從乙個終端啟動的情況下,這同乙個終端可能被其他的使用者使用。ps...
實現守護程序的步驟
8.2 建立守護程序 由於守護程序的特點,編寫守護程序程式必須遵守一定的規則。本節將闡述這些規則的要點,並給出相關 8.2.1 實現守護程序的步驟 在linux系統中,要程式設計實現乙個守護程序必須遵守如下的步驟。1 讓init程序成為新產生程序的父程序。呼叫fork函式建立子程序後,使父程序立即退...