linux下的守護進程及會話、進程組以及創建步驟

 轉自:https://www.cnblogs.com/coding-my-life/p/4069633.html

 

     守護進程、會話、進程組網上有許多不錯的資料。我也是網上搜羅了一堆,加上自己的理解。不敢說原創,只是寫在這怕自己忘記罷了。才疏學淺,難免有錯誤,歡迎大家指正。下面這篇寫很不錯,大家可以去看看:http://www.cnblogs.com/forstudy/archive/2012/04/03/2427683.html。下面的部分內容引用了他的描述。

  進程組:進程組就是把一個或多個進程劃爲一組,給這個組分配一個組id(pgid),這個id通常是進程組組長(該組的第一個進程)的pid。如果進程組組長退出,其組的pgid不變。在這個組解散之前,系統也不會分配與此pgid相同值的pid給其他程序。進程組的設計方便對一組進程進行管理,如同時終止一組進程。還有一些系統底層上的設計,如管道。在應用上,通常用於多進程程序判斷其他進程的狀態。

  會話:多個進程組構成一個會話。通常我們登錄用戶時會產生一個會話,退出時該會話結束。屬於該會話的進程(比如我們開的瀏覽器、音樂播放)在該會話結束時都會被終止。

  終端shell:在以前,計算機沒有界面,所有的操作都是命令行。因此,當時的程序往往與shell相關,它需要shell來顯示及輸入信息。比如top程序,如果你直接退出shell,則也將終止它。但是現在界面多了,很多不依賴shell。但很多服務器程序還是在終端上運行,如果想成爲守護進程,則需要脫離終端。

  很多操作系統是多用戶的。我們開機後,登錄用戶,然後開啓程序,開始作業(上網,看視頻等)。但是,很多程序並不是在用戶登錄後纔開始作業,這些一般都是守護進程,如網絡服務。守護進程是不依賴用戶的。如果一個服務器上的程序,在用戶登錄後開啓,用戶退出後終止,這怎麼可能。所以一個守護進程的特點:

守護進程編程步驟

  1. 創建子進程,父進程退出

    •所有工作在子進程中進行

    •形式上脫離了控制終端(不能在shell通過ctrl+c來終止)

  2. 在子進程中創建新會話

    •setsid()函數

    •使子進程完全獨立出來,脫離控制(用戶退出終止會話時不停止服務)

  3. 改變當前目錄爲根目錄

    •chdir()函數

    •防止佔用可卸載的文件系統

    •也可以換成其它路徑

  4. 重設文件權限掩碼

    •umask()函數

    •防止繼承的文件創建屏蔽字拒絕某些權限

    •增加守護進程靈活性

  5. 關閉文件描述符

    •繼承的打開文件不會用到,浪費系統資源,無法卸載

    •getdtablesize()

    •返回所在進程的文件描述符表的項數,即該進程打開的文件數目

  其中,第一點第二點是必要的,其他的可以根據自己的程序來決定是否處理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章