02守護程序學習之建立守護程序的七步驟及其分析

2021-10-25 08:54:46 字數 1659 閱讀 6795

與守護程序相關的文章:

01守護程序學習之會話的概念和建立會話(包含linux下相應id的總結一覽)

02守護程序學習之建立守護程序的七步驟及其分析

03守護程序學習之建立守護程序的**例子

1 守護程序的概念

1)脫離終端,執行於inux中的後台服務程序,不能直接和使用者互動。不受使用者登入、登出的影響。

2)在後台週期執行任務或等待處理某些事件。一般採用以d結尾的名字。如:預讀入緩輸出機制的實現,httpd,sshd,ftpd伺服器等。

2 守護程序與會話的區別

1)從程式步驟來看:

會話在子程序呼叫setsid()就已經成功建立,而守護程序仍需繼續處理。

2)從範圍來看:

會話為程序組的集合,而守護程序只是單獨乙個程序,會話更為廣泛。某個普通程序可以通過setpgid()來進入某個守護程序的所屬程序組,從而加入該會話(因為該程序組屬於該會話)。

3 建立守護程序的七步驟

1)建立子程序,父程序退出。

2)在子程序中建立新會話。

3)改變當前目錄為根目錄。

4)重設檔案許可權掩碼。

5)關閉檔案描述符。

6)開始執行守護程序核心工作。

7)守護程序退出處理程式模型。

注意:3)4)5)點可以根據情況是否設定。

4 對以上七步驟進行分析

1)守護程序建立的前提是會話;而會話建立的前提就是父程序退出,子程序建立。

2)子程序呼叫setsid()建立新會話後,此時會話(或者叫子程序)脫離終端控制。

3)改變當前目錄是為了防止守護程序在後台執行時被突然終止。例如我們u盤中有乙個守護程序的程式,當我們插進電腦後,電腦將其認為是乙個新的磁碟並分配目錄路徑,所以當我們執行它的時候突然拔掉,那麼電腦就會出現索引路徑失敗,非常容易出現未知錯誤更別說呼叫其功能了。所以我們必須改它成為乙個普遍存在的電腦路徑,例如根目錄"/「或者家目錄」/home/username",這樣當路徑存在的話電腦就會幫我們管理該程式(可認為電腦拷貝份了)。

4)重設許可權掩碼,是為了其它服務程序有許可權訪問到我這個守護程序檔案或者繼承的檔案建立遮蔽字拒絕某些許可權,增加守護程序靈活性。

5)關閉檔案描述符實際上是關閉stdin_fileno(0),stdout_fileno(1),stderr_fileno(2)這三個檔案描述符,減少對系統資源的浪費,因為守護程序基本不需要使用到這三個檔案描述符。

注意:這裡的關閉大部分開發人員採用dup2函式將三個描述符重定向至/dev/null檔案。由於我們需要開啟該檔案才能重定向,所以我們需要關閉這三個描述符的其中之一(一般關閉0),然後重定向其餘兩個描述符至該open(/dev/null)返回的檔案描述符。以上需要關閉乙個再開啟/dev/null是為了讓系統保持原來自動開啟的三個檔案描述符,即0,1,2。這樣我們下次再open的時候仍然按以前系統返回檔案描述符的最小值3。

6)迴圈執行處理任務或者等待事情的發生取處理。

7)當程式出錯時進行一些退出**處理,一般很少退出的。當我們想退出時一般使用一下命令:

kill -

9 pid//pid用ps aux找出對應的pid

實際上對於守護程序的管理或者退出都是使用指令碼語言來管理的,一般不需要在**中處理。

linux 守護程序詳解及建立守護程序

linux 守護程序詳解及建立守護程序 守護程序是一種後台執行並且獨立於所有終端控制之外的程序。守護程序的啟動 要啟動乙個守護程序,可以採取一下幾種方式 守護程序的建立 先來看乙個守護程序建立的例子 include include include include define maxfd 64 vo...

守護程序學習

守護程序學習 一 什麼是守護程序 守護程序,也就是通常說的daemon 精靈 程序,是linux中的一種服務程序。它的特點是 不占用控制終端 後台執行 獨立於控制終端 週期性執行 1.1後台執行 守護程序需要獨立於任何乙個控制終端。實現方法呼叫是通過建立子程序來充當守護程序,而父程序退出,這樣子程序...

守護程序及守護程序輸出

1 建立乙個輸出程式 2 建立乙個守護程序 1 建立乙個輸出程式 守護程序不與終端聯絡,所以,需要另外建立乙個程式用於輸出。也可以直接使用 bin echo example daemon help.cc include int main int argc,char argv else if argc...