天天看點

守護程序設計

1、什麼事守護程序

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

不占用控制終端(背景運作)

獨立于控制終端(有沒有對應的tty使用指令ps -aux檢視)

周期性運作

例如:smbd

注意l:在運作可執行程式的時候,後面加上&,意為背景運作。

2、守護程序設計要素

2.1背景運作

守護程序需要獨立于任何一個控制終端。實作方法調用是通過建立子程序來充當守護程序,而父程序退出,這樣子程序就可以在背景運作。

pid=fork();

if(pid>0)

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

else if(pid==0)

    {

         //守護程序

    }

守護程式設計

這個程式不獨立于控制終端的。

2.2 獨立于控制終端

守護程序不能占用控制終端,是以需要在背景運作。實作方法是調用setsid()函數。

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

        setsid();

        。。。。。

守護程式設計

2.3 擺脫父程序的影響:

1、修改工作目錄;

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

2、重設檔案權限掩碼;

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

3、關閉檔案描述符;

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

for(i=0;i<MAXFILE;i++)

close(i);

本守護程序的作用是不斷往/tmp/daemon.log中寫入内容

守護程式設計
守護程式設計

 修改:flag初始化為1.