守護進程

  1. 守護進程,即daemon進程,是linux中的後臺服務進程。它是一個生存期較長的進程,通常獨立於控制終端並且週期性的執行某種任務或等待處理某些發生的事件。linux有很多的系統服務,大多數是通過守護進程實現的。

如果想讓某個進程不因爲用戶、終端或者其他的變化而受到影響,那麼就必須把這個進程變成一個守護進程。

  1. 守護進程的編寫基本遵循以下幾個步驟:
    (1)創建子進程,父進程退出
    父進程先與子進程退出,會造成子進程沒有父進程,變成一個孤兒進程。在linux中,每當系統發現一個孤兒進程,就會自動有1號進程(init進程)收養它,這樣,原先的子進程就變成init進程的子進程了。
pid = fork();
if(pid > 0)
{
    exit(0);/*父進程退出*/
}

(2)在子進程中創建新會話 setsid()
(3)改變當前目錄爲根目錄 chdir(“/”)
(4)重設文件權限掩碼 一般設爲0,umask(0)
(5)關閉文件描述符
子進程從父進程繼承了一些已經打開了的文件。這些文件可能永遠不會被守護進程讀或寫,但他們一樣消耗系統資源,而且可能導致所在的文件系統無法被卸載。
守護進程已經與所屬的控制終端失去了聯繫。因此從終端輸入的字符不可能達到守護進程,守護進程用常規方法輸出的字符也不可能在終端上顯示出來。所以文件描述符0、1、2的3個文件失去了存在價值,應該被關閉。

for(i=0;i<maxfile;i++)
{
close(i);
}

這樣,一個簡單的守護進程就建立起來了,創建守護進程流程圖:
這裏寫圖片描述

發佈了28 篇原創文章 · 獲贊 6 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章