Linux 守護程序Daemon

2021-07-28 07:59:18 字數 1644 閱讀 1055

守護程序是生存期長的一種程序。

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