《unix環境高階程式設計》初始化乙個守護程序的呼叫,cmd可為守護程序名。
void daemonize(constchar *cmd)
/*
* 父程序退出,第乙個子程序繼承了父程序的程序組id,但該子程序有新的程序id,
* 這就保證了該子程序不是程序組的組長程序。為setsid準備了條件(呼叫setsid的程序
* 不能是程序組的組長程序)。
*/if ((pid = fork()) < 0) else
if (pid != 0)
/*
* 建立新會話,使第乙個子程序即當前程序(因為父程序已退出)成為新會話的首程序。
* 也使第乙個子程序成為新程序組的組長程序,沒有控制終端。
*/setsid();
/*
* 確保將來的操作不分配終端(主要針對unix系統v派生的系統,當會話首程序開啟
* 終端分配給此會話。這假定會話首程序在呼叫open時沒指定o_noctty標誌。)
*/sa.sa_handler = sig_ign;
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
if (sigaction(sighup, &sa, null) < 0)
if ((pid = fork()) < 0) else
if (pid != 0)
/* 改變工作目錄為根目錄 */if (chdir("/") < 0)
/* 關閉所有開啟的檔案描述符 */if (r1.rlim_max == rlim_infinity)
for (i = 0; i < r1.rlim_max; i++)
/* 0 1 2描述符指向/dev/null */fd0 = open("/dev/null", o_rdwr);
fd1 = dup(0);
fd2 = dup(1);
/* 初始化系統日誌 */openlog(cmd, log_cons, log_daemon);
if (fd0 != 0 || fd1 != 1 || fd2 != 2)
}
Python 建立守護程序的示例
考慮如下場景 你編寫了乙個python服務程式,並且在命令列下啟動,而你的命令行會話又被終端所控制,python服務成了終端程式的乙個子程序。因此如果你關閉了終端,這個命令列程式也會隨之關閉。要使你的python服務不受終端影響而常駐系統,就需要將它變成守護程序。守護程序就是daemon程式,是一種...
UNIX程式設計 13 守護程序
1.守護程序的程式設計規則 1 用umask將檔案模式建立遮蔽字設定為0 2 呼叫fork,然後使父程序退出 3 呼叫setsid建立乙個新會話 4 將當前工作目錄更改為根目錄 5 關閉不再需要的的檔案描述符 6 某些守護程序開啟 dev null使其具有檔案描述符0,1,2,例 初始化乙個守護程序...
守護程序的建立
守護程序 守護程序又稱作精靈程序是乙個特殊的後台程序,他沒有控制終端,週期性的執行該執行的任務 我們可以看出守護程序是沒有tty控制終端的,並且它是沒有組長id的。建立乙個守護程序一般需要以下的步驟 1 umask 0 2 fork 乙個子程序,然後exit掉父程序,保證它不是組長程序。3 呼叫se...