守護程序 概述
守護程序( daemon )是生存期長的一種程序。它們常常在系統引導裝入時起動,在系統關閉時終止。因為它們沒有控制終端,所以說它們是在後台執行的。linux 系 統有很多守護程序,它們執行日常事物活動。
所有守護程序都以超級使用者(使用者i d 為0 )的優先權執行。
沒有乙個守護程序具有控制終端—終端名稱設定為問號(?)、終端前台程序組i d 設定為-1 。缺少控制終端可能是精靈程序呼叫了s e t s i d 的結果。
除u p d a t e 以外的所有精靈程序都是程序組的首程序,對話期的首程序,而且是這些程序組和對話期中的唯一程序。u p d a t e 是它所在程序組和對話期(中的唯一程序,但是該程序組的首程序(可能也是該對話期的首程序)已經終止。
所有這些守護程序的父程序都是i n i t 程序。
守護程序程式設計5 步:
1. 首先做的是呼叫fork(), 然後使父程序exit, 這樣做實現了以下幾點, 如果該守護程序是由一條簡單shell 啟動的, 那麼使父程序終止使 得shell 認為這條命令已經執行完成。第二, 子程序繼承了父程序的程序組id, 這就保證了子程序不是乙個程序組的首程序. 這對於下面就要做的 setsid 呼叫是必要的前提
2. 呼叫setsid 以建立乙個新的會話, 並擔任該會話組的組長. 呼叫setsid 的作用由三個:
成為新的會話組的首程序
成為新的程序組的首程序
脫離控制終端
setsid() 函式格式:
#include
#incldue
pid setsid() 成功時返回該程序組的id, 失敗時返回-1
3. 改變當前目錄為根目錄
chdir(「/」);
4. 重設檔案許可權掩碼
umask(0);
由繼承得來的檔案方式建立遮蔽字可能會拒絕設定某些許可權, 例如: 若守護程序要建立乙個組可讀寫的檔案,
而繼承的檔案方式建立遮蔽字, 遮蔽了這兩種許可許可權, 則所要求的組可讀寫就不起作用.
5. 關閉不在需要的檔案描述符
守護程序的出錯處理:
守護程序完全脫離了控制終端,因此,不能像其他程式一樣通過輸出錯誤資訊到控制台的方式來通知程式設計師。
通常的辦法是使用
syslog
服務,將出錯資訊輸入到「
/var/log/message」
系統日誌檔案中去。
syslog
是 linux
中的系統由於日誌管理服務通過守護程序
syslog
來維護。
守護程序的例項
:#include#include#include#include#include#include#include#define maxfile 65535 // 最大的檔案描述符
int main()
else if(pc>0)
exit(0); // 父程序退出 , 這個子程序變成孤兒程序 , 由 init 程序接管 ,
setsid(); // 變為後台程式
chdir("/");
umask(0); // 對所有的許可權開放
for(i=0;i
檢視結果
fighter@fighter:/tmp$ cat dameon.log
this is a dameon
this is a dameon
this is a dameon
this is a dameon
this is a dameon
this is a dameon
this is a dameon
this is a dameon
this is a dameon
this is a dameon
this is a dameon
this is a dameon
this is a dameon
this is a dameon
linux C語言學習筆記
linux下用c語言解析xml 解析的xml檔案內容 test.xml 第一步 在linux下部署解析xml所有的環境 2 解壓壓縮包 tar zxvf libxml2 2.9.9.tar.gz 進入解壓後的目錄 cd libxml 3 編輯命令 configure 注意 如果configure檔案...
Linux C語言學習筆記1
1 網路配置 虛擬機器 設定 網路介面卡 橋接 適用於網路環境有路由器,可分配多個ip nat 只有乙個ip 2 更新軟體列表 sudo apt get update 如果殘留鎖檔案 刪除方法 sudo rm 鎖檔案路徑 更改為中國伺服器 ubuntu software center edit so...
Linux C語言學習筆記3
1 整型資料 1.整型變數int int a 定義了一塊記憶體,記憶體的名字叫a,用來存放整型資料 2.負數在計算機中的儲存形式 0000 0010 2 0是符號位,代表正整數 1000 0010 2 1是符號位,代表負整數 但在計算機記憶體中,負數是以補碼的形式儲存的 即,將 1000 0010 ...