Linux下守護程序的實現

2021-07-05 10:31:37 字數 1074 閱讀 4581

一.fork()函式

通過系統呼叫建立乙個與原程序幾乎一模一樣的程序,可理解為轉殖了乙個自己。fork函式的返回值有下面幾種情況:

1. 在父程序中返回新建立子程序的的程序id

2. 在子程序中返回0

3. 呼叫失敗,返回負值

二.程序相關知識

1.程序組

乙個或者多個程序的集合。每個程序組擁有乙個程序組id,同時有乙個程序組長,且( 程序組長id == 程序組id )。

2.會話

乙個或者多個程序組的集合。每個會話擁有乙個領頭程序。

3.控制終端

乙個會話的所有程序組共享乙個控制終端,fork產生的子程序繼承父程序的程序組、會話、控制終端。會話的領頭程序可以重新開啟乙個控制終端。

三.setsid()函式

建立新會話:setsid()

若呼叫程序是組長程序,則出錯返回。一般用法如下:

if(fork())

exit(0); // 父程序退出

setsid(); // 建立新會話,同時子程序變為組長程序

若呼叫程序不是組長程序,則建立乙個新會話:

1. 該程序變成新會話領頭程序

2. 該程序成為乙個新程序組的組長程序

3. 該程序沒有控制終端,如果之前有,則中斷

由二(3)可知,會話的領頭程序可重新開啟乙個控制終端。為了防止情況發生,可如下使用:

if(fork())

exit(0); // 父程序退出

setsid(); // 以子程序為領頭程序建立會話

if(fork())

// 子程序呼叫fork,產生二代子程序

exit(0); // 二代子程序不再是新建會話的領頭程序(不能開啟控制終端)

linux下的守護程序

守護程序特點 1 生存期長,在系統自舉的時候啟動,僅在系統關閉時終止。2 沒有控制終端,所以說他們是在後台執行的。關於編寫守護程序程式時要遵守的一些基本規則 1 呼叫umask將檔案模式建立遮蔽字設定為0。防止由繼承得來的檔案模式建立遮蔽字可能會拒絕設定某些許可權 2 呼叫fork 然後使得父程序退...

linux下的守護程序

linux下的常駐程序的作用不可忽略,但這裡面的問題也不能忽略,怎麼啟動程序,怎麼結束程序,怎麼在程序掛掉之後重啟程序都要設計的合理。下面看乙個shell控制的php常駐程序的例子。不廢話,直接撈乾貨,上 通過 來講解更容易理解 複製 如下 bin sh filename test.sh 絕對定位該...

linux守護程序實現

守護 daemon 程序即在後台執行的程序,網上有很多介紹守護程序的文章,這裡不再贅述,直接上 static void daemon prep int stderr log just in case.open dev null o rdwr dup 0 dup 0 static int daemon...