說說守護程序

2021-05-17 15:59:10 字數 1134 閱讀 4055

華清遠見嵌入式學院

講師。守護程序又稱精靈程序(daemon),一般在系統啟動時開始,而在系統關閉時終止。沒有控制終端,執行在後台。在linux系統中有很多這類程序。

下面說一下如何建立乙個守護程序。

(1) 使用umask修改檔案的遮蔽字,為檔案賦予跟多的許可權,因為繼承來的檔案可能某些許可權被遮蔽,從而失去某些功能,如讀寫。

(2) 呼叫fork函式建立乙個子程序,而父程序退出。

(3) 呼叫settid建立乙個新會話,當前程序為會話組長,並且關閉控制終端。

(4) 修改程序工作目錄為根目錄,chdir(「/」).

(5) 關閉不需要的從父程序繼承過來的檔案描述符。

(6) 開啟/dev/null,null也稱黑洞裝置,就是寫入或讀出什麼都沒有效果。代開這個裝置是檔案具有0,1,2三個檔案描述符,但是對標準輸入,標準輸出,標準出錯的操作都沒有效果。這部分內容不是必須的。

下面使用乙個例程說一下這個過程。

#include

#include

#include

#include

#include

int main()

else if(pid != 0)

//*** step 3:setsid

setsid();

//*** step 4:chdir

chdir("/");

//*** step 5:close all open file descriptors

if(r.rlim_max == rlim_infinity)

for(i = 0; i < r.rlim_max; i++)

while(1)

return 0;

}上面便是乙個守護程序的建立過程,可是一些書或網路上寫守護程序,會在第三步和第四步之間新增這樣一點**。

if((pid = fork()) < 0)

else if(pid != 0)

很多學生就會問,為什麼要建立兩次程序呢,這是因為第三步結束後,程序建立了乙個新的會話組,並成為會話組長,而會話組長可能獲得控制終端,如果獲得了控制終端那麼或這個程序就不是守護程序了。所以新增了這幾句**,讓程序失去會話組長的身份,從而沒有獲得控制終端的許可權。

守護程序及守護程序輸出

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...

守護程序之守護程序的慣例

在unix系統中,守護程序遵循下列公共慣例 例項 程式清單13 3所示程式說明了守護程序可以重讀其配置檔案的一種方法。該程式使用sigwait以及多執行緒 可參考 程式清單13 3 守護程序重讀配置檔案 include apue.h include include sigset t mask ext...