Chapter 13 守護進程

來源:互聯網
上載者:User

1.守護進程的特徵

    守護進程也稱精靈進程是生存期長的一種進程,它們常常在系統引導裝入時啟動,在系統管比時終止。守護進程沒有控制終端,所以它們是在後台啟動並執行。守護進程是一種很有用的進程。 Linux的大多數伺服器就是用守護進程實現的。比如,Internet伺服器inetd,Web伺服器httpd等。同時,守護進程完成許多系統任務。比如,作業規划進程crond,列印進程lpd等。

    所有守護進程都以超級使用者(使用者ID為0)的優先權運行。沒有一個守護進程具有控制終端,控制名稱設定為(?)、終端前台進程組ID設定為-1。除update以外的所有守護進程都是組的首進程,對話期的首進程,而且是這些進程組和對話期中的唯一進程。所以的守護進程的父進程都是init進程。

    守護進程最重要的特性是後台運行。在這一點上DOS下的常駐記憶體程式TSR與之相似。其次,守護進程必須與其運行前的環境隔離開來。這些環境包括未關閉的檔案描述符,控制終端,會話和進程組,工作目錄以及檔案建立掩模等。這些環境通常是守護進程從執行它的父進程(特別是shell)中繼承下來的。最後,守護進程的啟動方式有其特殊之處。它可以在Linux系統啟動時從啟動指令碼/etc/rc.d中啟動,可以由作業規划進程crond啟動,還可以由使用者終端(通常是shell)執行。

 

2.編程規則

1).首先做的是調用fork,然後使父進程exit

2).調用setsid以建立一個新對話期

3).將當前工作目錄更改為根目錄

4).將檔案方式建立屏蔽字設定為0

5).關閉不再需要的檔案描述符

6).某些守護進程開啟/dev/null使其具有檔案描述符0,1,2,這樣,任何一個試圖讀標準輸入、寫標準輸出或標準出錯的庫曆程都不會產生任何效果。

 

 

3.出錯記錄

大多數守護進程使用syslog設施(守護進程出錯記錄措施)。顯示了syslog設施的詳細組織圖。

 

該設施的介面函數:

#include <syslog.h>void openlog(const char *ident, int option, int facility);void syslog(int priority, const char *format, ...);void closelog(void);int setlogmask(int maskpri);//返回之前日誌優先順序掩碼值。

 

4.守護進程的慣例

1).如果守護進程使用一個鎖檔案,那麼檔案通常儲存在/var/run目錄下。

2).如果守護進程支援配置選項,那麼它們通常被儲存在/etc目錄中。

3).守護進程可以通過命令列啟動,但是通常它們是由系統初始化指令碼之一(/etc/rc*或/etc/init.d/*)啟動的

4).如果一守護進程有一個設定檔,那麼當該守護進程啟動時,它讀該檔案,但是此之後一般就不會再次查看它

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.