一.daemon的特點
必須由root啟動。它是非互動式程式,所以沒有控制中斷,無須使用者輸入。不能控制終端,所以無任何輸出,因此無論是向stderr還是stdout都需做特別處理。通常作為程序組和會話的領導程序。父程序是init,因為真正的父程序fork以後就exit了,是由init繼承的孤兒程序。
二.編寫daemon時該遵循的步驟
1.在父程序中執行fork後exit;
2.在子程序中呼叫setsid;//建立新的會話和程序組,消除新程序與任何控制終端的關聯
3.讓『/』目錄成為子程序的工作目錄;//防止其他程式想解除安裝某個檔案系統時由於daemon的占用而導致失敗
4.把子程序的umask變為0;//避免守護程序繼承的umask受到建立檔案和目錄操作的干擾
5.關閉任何不需要的檔案描述符;
6.做任何你想做的。
三.相關函式呼叫
1.fork;
2.setsid;
3.chdir;
4.umask。
四.出錯處理
由於daemon呼叫setsid後不再有控制終端,所以也無法向stdout和stderr輸出。可通過源自bsd的syslog服務,系統日誌守護程序syslogd提供這一服務。
相關介面原型:
#include
void openlog(char *ident, int option, int facility);
void closelog(void);
void syslog(int priority, char *format, ...);
linux下日誌檔案通常為/var/log/messages。
如果使用了syslog服務,daemon中可以將自己定義的訊息寫入自己定義的檔案,但daemon產生的所有出錯資訊都記錄到系統日誌中。
五.和守護程序通訊
1.讀取配置檔案
使用open、read呼叫或標準庫里的fopen、fread,注意將錯誤資訊寫入日誌。
2.加入訊號處理功能
通過kill向daemon傳送訊號,在daemon中加入響應該訊號的相應**,**中可以做你想做的任何事:例如重新讀取配置檔案。這樣就可以控制動態daemon的行為了。
Python多執行緒程式設計中daemon屬性的作用
在指令碼執行過程中有乙個主線程,若在主線程中建立了子執行緒,當主線程結束時根據子執行緒daemon屬性值的不同可能會發生下面的兩種情況之一 屬性daemon的值預設為false,如果需要修改,必須在呼叫start 方法啟動執行緒之前進行設定。另外要注意的是,上面的描述並不適用於idle環境中的互動模...
daemon守護程序
daemon守護程序 守護程序是乙個後台程序,不能夠控制終端,所以任何輸出,無論是向標準出錯裝置stderr還是向標準輸出裝置stdout的輸出都需做特別處理。守護程序一般在系統啟動時啟動,它的父程序是init程序。建立守護程序 1在父程序執行fork然後讓父程序退出。2在子程序中使用setsid呼...
守護程序 daemon
守護程序常常在系統引導裝入時啟動,在系統關閉時終止。一般說daemon程式在後台執行,是因為它沒有控制終端,無法和前台的使用者互動。daemon程式一般都作為服務程式使用,等待客戶端程式與它通訊。我們也把執行的daemon程式稱作守護程序。乙個守護程序的父程序是init程序,因為它真正的父程序在fo...