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