守護程序構造原理及實現

2021-09-25 05:37:05 字數 1821 閱讀 3345

守護程序的**實現

守護程序(daemon):在後台執行的一種特殊程序,沒有控制終端,週期性的執行某項任務。在linux上很多服務都是以守護程序的形式執行在系統上,如inetd程序偵聽系統網路介面,定時任務程序cron。

在centos系統上輸入ps命令,檢視所有的程序情況(圖中列出部分):

注意事項:

系統建立守護程序由方括號闊起來:由系統建立的守護程序名由方括號擴起來,[kthreadd]程序是所有系統守護程序的父程序,kthreadd程序的程序號為2,可見其他守護程序的父程序為2;

守護程序都是與終端分離的,因此其終端(tty)那一欄顯示為「?」,大多數守護程序都是以超級使用者root特權執行;

程序號為1的程序為init程序,父程序id為0的程序通常是核心程序;

守護程序要想專注的在系統上週期性執行任務,必須與執行前環境隔離開來。包括:控制終端、父程序的檔案描述符、工作目錄、檔案掩碼、會話和程序組等,這些環境通常是由守護程序從其父程序繼承而來的。

守護程序可以在linux系統啟動時從啟動指令碼/etc/rc.d中啟動,可以由作業規劃程序crond啟動,還可以由使用者終端(通常是 shell)執行。

程序屬於乙個程序組,程序組號(gid)就是程序組長的程序號(pid);

登陸會話可以包含多個程序組,這些程序組共享乙個控制終端(這個控制終端通常是建立程序的登陸終端);

呼叫umask將檔案模式建立遮蔽字設定為乙個已知值(通常為0):

呼叫fork,然後是父程序exit:

呼叫setsid建立乙個新會話:

改變當前工作目錄:

關閉不再需要的檔案描述符:

某些守護繼承開啟/dev/null使其具有檔案描述符0、1和2:daemon.c守護程序建立函式

#include

#include

#include

#include

#include

#include

void

init_daemon

(void

)

test.c測試函式

#include

#include

//守護程序初始化函式

void

init_daemon

(void);

main()

}}

將兩個函式編譯為可執行檔案daemon,執行編譯語句gcc test.c daemon.c -o daemon,編譯成功,沒問題直接執行;

檢視daemon程序狀態,守護程序daemon正在執行:

檢視日誌檔案內容,建立的守護程序每格十秒更新一次test.log日誌。

說明:在系統呼叫庫中有乙個庫函式可以直接使乙個程序變成守護程序,

#include

int daemon(int nochdir, int noclose);

守護程序及守護程序輸出

1 建立乙個輸出程式 2 建立乙個守護程序 1 建立乙個輸出程式 守護程序不與終端聯絡,所以,需要另外建立乙個程式用於輸出。也可以直接使用 bin echo example daemon help.cc include int main int argc,char argv else if argc...

守護程序及守護程序輸出

1 建立乙個輸出程式 2 建立乙個守護程序 1 建立乙個輸出程式 守護程序不與終端聯絡,所以,需要另外建立乙個程式用於輸出。也可以直接使用 bin echo example daemon help.cc include int main int argc,char ar else if argc 2...

實現守護程序

目錄守護程序 也稱為精靈程序,守護程序是乙個在後台執行並且不受任何終端控制的程序。unix作業系統有很多典型的守護程序 其數目根據需要或20 50不等 它們在後台執行,執行不同的管理任務。使用者使守護程序獨立於所有終端是因為,在守護程序從乙個終端啟動的情況下,這同乙個終端可能被其他的使用者使用。ps...