守護程序的6步實現

2021-08-14 20:30:37 字數 930 閱讀 8339

#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函式建立子程序後,使父程序立即退...