linux下的守護程序

2021-07-15 06:58:47 字數 968 閱讀 3757

守護程序特點:(1)生存期長,在系統自舉的時候啟動,僅在系統關閉時終止。

(2)沒有控制終端,所以說他們是在後台執行的。

關於編寫守護程序程式時要遵守的一些基本規則:

(1)呼叫umask將檔案模式建立遮蔽字設定為0。(防止由繼承得來的檔案模式建立遮蔽字可能會拒絕設定某些許可權)

(2) 呼叫fork(),然後使得父程序退出,這樣做的目的:1.如果該守護程序是作為一條簡單shell命令啟動的,那麼父程序終止使得shell認為這條命令已經執行完畢2.子程序繼承了父程序的程序組id,但是有乙個新的程序id,這就保證了子程序不是乙個程序組的組長id,這對於setsid呼叫是必要的前提條件。

(3)呼叫setsid建立新的對話,然後使得呼叫程序1.成為新會話的首程序2.成為乙個新程序組的組長程序3.沒有控制終端

(4)將當前工作目錄更改為根目錄。要確保不再裝配檔案系統中,因為守護程序在引導之前是一直存在的,如果守護程序的當前工作目錄在乙個裝配檔案系統中,那麼該檔案系統就不能被拆卸,這與裝配檔案系統的原意不符。

(5)關閉不再需要的檔案描述符。

(6)某些守護程序開啟/dev/null使其具有檔案描述符0,1,2,這樣任何乙個試圖讀標準輸入,寫標準輸入或者標準出錯的庫例程都不會產生任何效果。

關於守護程序**的示例:

#include

#include

#include

#include

#include

#include

#include

int main(int argc,char* argv)

setsid();//(3)

chdir("/");//(4)

int i = 0;

for(i ;i < getdtablesize();i++)//(5)

while(1)//守護程序的結果不能列印到終端上去,可以寫到乙個日誌檔案中去

return 0;

}

linux下的守護程序

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

Linux下守護程序的實現

一.fork 函式 通過系統呼叫建立乙個與原程序幾乎一模一樣的程序,可理解為轉殖了乙個自己。fork函式的返回值有下面幾種情況 1.在父程序中返回新建立子程序的的程序id 2.在子程序中返回0 3.呼叫失敗,返回負值 二.程序相關知識 1.程序組 乙個或者多個程序的集合。每個程序組擁有乙個程序組id...

linux下的守護(精靈)程序daemon

include include include include include include include include intmain else if pid 0 2.在子程序中建立新會話 setsid 3.改變當前目錄為根目錄 chdir 4.重設檔案許可權掩碼 umask 0 5.關閉檔...