守護程序學習

2022-07-23 21:39:19 字數 1632 閱讀 4960

守護程序學習

一、什麼是守護程序

守護程序,也就是通常說的daemon(精靈)程序,是linux中的一種服務程序。它的特點是:

不占用控制終端(後台執行)

獨立於控制終端

週期性執行

1.1後台執行

守護程序需要獨立於任何乙個控制終端。實現方法呼叫是通過建立子程序來充當守護程序,而父程序退出,這樣子程序就可以在後台執行。(範例展示)

pid=fork();

if(pid>0)

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

else (pid==0)

1.2獨立於控制終端

守護程序不能占用控制終端,因此需要在後台執行。實現方法是呼叫setsid()函式。

pid=fork();

if(pid>0)

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

else (pid==0) //護程序

1.3擺脫父程序影響

1.3.1修改工作目錄

程序活動時,其工作目錄所在的檔案系統不能解除安裝。例如:我們是從/mnt/usb目錄下啟動該護程序的,那麼如果守護程序的工作目錄就是/mnt/usb,我們就無法在守護程序還在執行的情況下umount /mnt/usb。所以一般需要將守護的工作目錄切換到根目錄。護的工作目錄切換到根目錄。chdir("/");

1.3.2修改檔案許可權掩碼

檔案許可權掩碼是指遮蔽掉檔案許可權中的對應位。比如掩碼是500,它就遮蔽了檔案建立者的可讀與可執行許可權。由於子程序要繼承父程序的檔案許可權掩碼,這勢必影響子程序中新建立的檔案的訪問許可權,為避免該影響,就需要重新對子程序中的許可權掩碼清零。通常的使用方法為函式:程中的許可權掩碼清零。通常的使用方法為函式:umask(0)

1.3.3關閉開啟檔案

同檔案許可權碼一樣,子程序還會從父程序那裡繼承一些已經開啟了的檔案。這些被開啟的檔案可能永遠不會被守護程序讀寫,但它們一樣消耗系統資源,而且會導致檔案所在的檔案系統無法解除安裝。因此在子程序中需要將這些檔案關閉。

for(i=0;i二、守護程序編寫

1 #include 2 #include 3 #include 4 #include 5

6int

main()722

if(pid>0

)23 exit(0

);24

25//

2.脫離控制端

26setsid();

2728

改變工作目錄

29 chdir("/"

);30

清除掩碼

31 umask(0

);32

33//

3.3關閉開啟的檔案

34for(i;i<65535;i++)

35close(i);

3637

//4.守護程序的實際工作

38while(1)39

46write(fd,buffer,strlen(buffer));

47close(fd);

48 sleep(1

);49

}50 }

編譯執行如上**則會出現:

守護程序 學習demo

守護程序demo如下 include include include include include include include include define length 128 char pid name test static void start daemon const char da...

守護程序及守護程序輸出

1 建立乙個輸出程式 2 建立乙個守護程序 1 建立乙個輸出程式 守護程序不與終端聯絡,所以,需要另外建立乙個程式用於輸出。也可以直接使用 bin echo example daemon help.cc include int main int argc,char argv else if argc...

守護程序及守護程序輸出

1 建立乙個輸出程式 2 建立乙個守護程序 1 建立乙個輸出程式 守護程序不與終端聯絡,所以,需要另外建立乙個程式用於輸出。也可以直接使用 bin echo example daemon help.cc include int main int argc,char ar else if argc 2...