linux 守護進程詳解及建立守護進程
守護進程是一種后臺運行并且獨立于所有終端控制之外的進程。
守護進程的啟動
要啟動一個守護進程,可以采取一下幾種方式:
在系統期間通過系統的初始化腳本啟動守護進程。這些腳本通常在目錄etc/rc.d下,通過它們所啟動的守護進程具有超級用戶的權限。系統的一些基本服務通常都是通過這種方式啟動的。 很多網絡服務程序都是由inetd守護程序啟動的。它監聽各種網絡請求,如telnet、ftp等,在請求到達時啟動相應的服務器程序(telnet server,ftp server等)。 由cron定時啟動的處理程序。這些程序在運行時實際上也是一種守護進程。 由at啟動的處理程序。 守護程序也可以從終端啟動,通常這種方式只用于守護進程的測試,或者是重啟因某種原因而停止的進程。 在終端上用nohup啟動的進程。用這種方法可以把所有的程序都變成守護進程。守護進程的建立
先來看一個守護進程建立的例子:
#include <sys/types.h>#include <signal.h>#include <unistd.h>#include <syslog.h>#define MAXFD 64void daemon_init(const char* pname, int facility){ int i; pit_t pid; /*fork(),終止父進程*/ if(pid=fork()){ exit(0); } /*第一子進程*/ setsid(); signal(SIGHUP,SIG_IGN); /*fork()終止第一子進程*/ if(pid=fork()) exit(0); /*第二子進程*/ daemon_proc = 1; /*將工作目錄設定位“/”*/ chdir("/"); /*清除文件掩碼*/ umask(0); for(i = 0; i<MAXFD; i++){ close(i); } /*打開log*/ openlog(pname, LOG_PID, facility);}從上面的程序可以看出,建立一個守護進程需要以下操作:
新聞熱點
疑難解答