daemon程式設計小結

2021-05-17 17:11:46 字數 1096 閱讀 3619

一.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...