第13章 守護進程
13.1 引言
*守護進程也稱精靈進程(daemon)是生存期較長的一種進程。它們常常在系統自舉時啓動,僅在系統關閉時才終止。因爲它們沒有控制終端,所以說它們是在後臺運行的。UNIX系統有很多守護進程,它們執行日常事務活動
13.2 守護進程的特徵
*系統進程依賴於操作系統實現。父進程ID爲0的各進程通常是內核進程,它們作爲系統自舉過程的一部分而啓動。(init是此種進程的例外,它是內核在自舉時啓動的用戶層命令。)內核進程是特殊的,通常存在於系統的整個生命期中。它們以超級用戶特權運行,無控制終端,無命令行
13.3 編程規則
*(1)首先要做的是調用umask將文件模式創建屏蔽字設置爲0
(2)調用fork,然後使父進程退出(exit)
(3)調用setsid以創建一個新會話
(4)將當前工作目錄更改爲根目錄
(5)關閉不再需要的文件描述符
(6)某些守護進程打開/dev/null使其具有文件描述符0、1和2,這樣,任何一個試圖讀標準輸入、寫標準輸出或標準出錯的庫例程都不會產生任何效果
13.4 出錯記錄
*有三種方法產生日誌消息
(1)內核例程可以調用log函數
(2)大多數用戶進程(守護進程)調用syslog函數以產生日誌消息
(3)在此主機上的一個用戶進程,或通過TCP/IP網絡連接到此主機的其他主機上的一個用戶進程可將日誌消息發向UDP端口514
13.5 單實例守護進程
*文件和記錄鎖機制是一種方法的基礎,該方法用來保證一個守護進程只有一個副本在運行
13.6 守護進程的慣例
*若守護進程使用鎖文件,那麼該文件通常存放在/var/run目錄中
*若守護進程支持配置選項,那麼該配置文件通常存放在/etc目錄中
*守護進程可用命令行啓動,但通常它們是由系統初始化腳本之一(/etc/rc*或/etc/init.d/*)啓動的
*某些守護進程將捕捉SIGHUP信號,當它們接收到該信號時,重新配置文件
13.7 客戶進程-服務器進程模型
*守護進程常常用作服務器進程
*一般而言,服務器是等待客戶進程與其聯繫的一個進程,客戶進程向它提出某種類型的服務要求
*雙向通信:客戶進程向服務器進程發送請求,服務器進程則向客戶進程回送應答