Unix守護程序的建立示例

2022-04-08 20:12:27 字數 1243 閱讀 2301

《unix環境高階程式設計》初始化乙個守護程序的呼叫,cmd可為守護程序名。
void daemonize(const

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