守護進程是一種後台運行彬接獨立於所有終端控制之外的進程.
正是因為守護進程獨立於所有的終端控制,因此,他無法向通常程序那樣將信息直接輸出到標准輸出和標准錯誤輸出.威力解決這個問題,Linux提供了syslog()函數.通過他,守護進程可以向系統的log文件寫入信息.他在系統函數庫syslog.h中的定義如下:
void syslog(int priority,char *format,...);
在一個進程使用syslog()的時候,應該先用openlog()打開系統紀錄.
#include
void openlog(const *ident,int options,int facility);
參數ident是一個字符竄,通常他是程序的名字.
options可以是下面的值.
LOG_CONS 如果不能寫入LOG值.則直接將其發送給主控台.
LOG_NDELAY 直接建立SYSLOGD進程而不是打開LOG文件
LOG_PERROR 將信息寫入LOG同時也發送給標准錯誤輸出.
LOG_PID 在每個信息中加入PID值.用一個
下面用一個示例來講解:
#include
#include
#include
#include
#define MAXFD 64
main(){
int i;
if(fork())
exit(1); /*父進程退出,使子進程成為後台進程*/
setsid(); /*建立一個新的進程組,在這個新的進程組中,子進程成為這個進程組的首進程.這樣,該進程就獨立於所有終端之外*/
signal(SIGHUP,SIG_IGN); /*忽略SIGHUP信號*/
if(fork())
exit(1); /*再次fork(),保證該進程不是進程組的首進程.*/
chdir("/"); /*改變當前目錄,使得進程不和任何文件系統關聯*/
unmask(0); /*清除文件掩碼,消除進程掩碼對其所創建文件的影響*/
for(i=0;i close(i); /*關閉所有文件描述符*/
openlog(pname,LOG_PID,facility); /*打開記錄*/