守護程序是在後台執行不受終端控制的程序(如輸入、輸出等),一般的網路服務都是以守護程序的方式執行。守護程序脫離終端的主要原因有兩點:(1)用來啟動守護程序的終端在啟動守護程序之後,需要執行其他任務。(2)(如其他使用者登入該終端後,以前的守護程序的錯誤資訊不應出現)由終端上的一些鍵所產生的訊號(如中斷訊號),不應對以前從該終端上啟動的任何守護程序造成影響。要注意守護程序與後台執行程式(即加&啟動的程式)的區別。
建立守護程序的過程:
1. 呼叫fork建立子程序。父程序終止,讓子程序在後台繼續執行。
2. 子程序呼叫setsid產生新會話期並失去控制終端呼叫setsid()使子程序程序成為新會話組長和新的程序組長,同時失去控制終端。
3. 忽略sighup訊號。會話組長程序終止會向其他程序發該訊號,造成其他程序終止。
4. 呼叫fork再建立子程序。子程序終止,子子程序繼續執行,由於子子程序不再是會話組長,從而禁止程序重新開啟控制終端。
5. 改變當前工作目錄為根目錄。一般將工作目錄改變到根目錄,這樣程序的啟動目錄也可以被卸掉。
6. 關閉開啟的檔案描述符,開啟乙個空裝置,並複製到標準輸出和標準錯誤上。 避免呼叫的一些庫函式依然向螢幕輸出資訊。
7. 重設檔案建立掩碼清除從父程序那裡繼承來的檔案建立掩碼,設為0。
8. 用openlog函式建立與syslogd的連線。
守護程序及守護程序輸出
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...