守護程序學習
一、什麼是守護程序
守護程序,也就是通常說的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...