守護程序是生存期長的一種程序。
linux常用於伺服器,程式通常不執行在前台。執行於前台的程序和終端關聯,一旦終端關閉,程序也隨之退出。因為守護程序不和終端關聯,因此它的標準輸出和標準輸入也無法工作,除錯資訊應該寫入到普通檔案中,以便將來進行錯誤定位和除錯。而且守護程序通常以root許可權執行。
程式示例:
#include
#include
#include
#include
#include
#include
int main()
// 重定向0、1、2檔案到/dev/null
open("/dev/null", o_rdonly); // 標準輸入
open("/dev/null", o_wronly); // 標準輸出
open("/dev/null", o_wronly); // 標準錯誤
syslog(log_err|log_kern, " this is syslog\n");
// 後台程序不退出
while(1)
sleep(1);}}
}
由於不能再使用標準輸入和輸出,因此需要呼叫以下函式來輸出除錯資訊。
#include
void openlog(const
char* ident, int option, int facility);
void syslog(int priority, const
char* format, ...);
void closelog(void);
int setlogmask(int maskpri);
守護程式往往只有乙個例項,而不允許多個,可以用檔案鎖來實現單例。
程式示例:(摘自unix環境高階程式設計)
#include
#include
#include
#include
#include
#include
#include
#include
#define lockfile "/var/run/mydaemon.pid"
#define lockmode (s_irusr | s_iwusr | s_irgrp | s_iroth)
extern
int lockfile(int);
int lockfile(int fd)
int already_running(const
char *filename)
if (lockfile(fd) == -1)
syslog(log_err, "can't lock %s: %m\n", filename);
exit(1);
}ftruncate(fd, 0);
sprintf(buf, "%ld", (long)getpid());
write(fd, buf, strlen(buf) + 1);
return0;}
int main(int argc, char *argv)
linux 守護程序 daemon
原文出處 daemon程式簡介 daemon是長時間執行的程序,通常在系統啟動後就執行,在系統關閉時才結束。一般說daemon程式在後台執行,是因為它沒有控制終端,無法和前台的使用者互動。daemon程式一般都作為服務程式使用,等待客戶端程式與它通訊。我們也把執行的daemon程式稱作守護程序。比如...
daemon守護程序
daemon守護程序 守護程序是乙個後台程序,不能夠控制終端,所以任何輸出,無論是向標準出錯裝置stderr還是向標準輸出裝置stdout的輸出都需做特別處理。守護程序一般在系統啟動時啟動,它的父程序是init程序。建立守護程序 1在父程序執行fork然後讓父程序退出。2在子程序中使用setsid呼...
守護程序 daemon
守護程序常常在系統引導裝入時啟動,在系統關閉時終止。一般說daemon程式在後台執行,是因為它沒有控制終端,無法和前台的使用者互動。daemon程式一般都作為服務程式使用,等待客戶端程式與它通訊。我們也把執行的daemon程式稱作守護程序。乙個守護程序的父程序是init程序,因為它真正的父程序在fo...