一、什麼是守護程序
守護程序,也就是通常說的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編譯執行如上**則會出現:6 int main()
7 22 if(pid>0)
23 exit(0);
24
25 //2.脫離控制端
26 setsid();
27
28 改變工作目錄
29 chdir("/");
30 清除掩碼
31 umask(0);
32
33 關閉開啟的檔案
34 for(i;i<65535;i++)
35 close(i);
36
37 //4.守護程序的實際工作
38 while(1)
39
46 write(fd,buffer,strlen(buffer));
47 close(fd);
48 sleep(1);
49 }
50 }
Linux守護程序
linux下守護程序一般分為5步,但是實際上只有前兩步是關鍵。第一步 建立子程序,關閉父程序。使用fork 建立,父程序exit 退出。關鍵第二步 建立新的會話id,setsid 作用是使子程序擺脫原有的會話 程序組 終端的控制,其實,linux下每個程序都是由一號程序建立而來的,每個程序都是1號程...
Linux 守護程序
守護程序daemon,是生存期較長的一種程序,名字一般以字母d結尾。它們常常在系統自舉時啟動,僅在系統關閉時才終止。因為它們沒有控制終端,所以說它們是在後台執行的。linux系統有很多守護程序,它們執行日常事務活動。自舉只有兩個功能 加電自檢和磁碟引導。加電自檢 當我們按下計算機電源開關時,頭幾秒鐘...
Linux守護程序
程式設計級別 一 守護程序的概念 守護程序是一種生存期比較長的程序,常常在系統自舉時啟動,在系統關閉時退出。因為他們沒有控制終端,因此是在後台執行的。二 守護程序的程式設計規則 1清除檔案模式建立遮蔽字 2成為乙個新的會話首程序 3略hup訊號。然後再次fork 4改變當前工作路徑 5關閉所有的檔案...