當前位置:編程學習大全網 - 源碼下載 - 如何在linux系統下用守護進程執行

如何在linux系統下用守護進程執行

編寫守護程序的要點:

(1)讓程序在後臺執行。方法是調用fork()生成壹個子進程,然後讓父進程退出。

(2)調用setsid()創建壹個新的會話。控制終端、登錄會話和進程組通常是從父進程繼承的,守護進程應該通過調用setsid()使進程成為會話領導者來擺脫它們而不受它們的影響。成功調用setsid()後,進程成為新的會話領導和進程領導,並與原來的登錄會話、進程組和控制終端分離。

(3)禁止進程重新打開控制終端。經過以上步驟,流程已經成為沒有終端的會話leader,但是可以重新申請打開終端。為了避免這種情況,可以通過使流程不再是會話領導者來實現。再次通過fork()創建壹個新的子流程,以便調用fork的流程退出。

(4)關閉不再需要的文件描述符。子進程從父進程繼承打開的文件描述符。如果不關閉,會浪費系統資源,導致進程所在的文件系統被卸載,造成不可預知的錯誤。首先獲取最高的文件描述符值,然後使用循環程序關閉從0到最高文件描述符值的所有文件描述符。

(5)將當前目錄改為根目錄。

(6)子進程從父進程繼承的文件創建掩碼可能會拒絕某些權限。為了防止這種情況,使用unmask(0)清除屏蔽字。

(SIGCHLD信號處理。對於服務器進程,當請求到來時,通常會生成壹個子進程來處理請求。如果父進程沒有等到子進程結束,子進程就會變成僵屍,從而占用系統資源。如果父進程等待子進程結束,會增加父進程的負擔,影響服務器進程的並發性能。在Linux下,SIGCHLD信號的操作可以簡單的設置為SIG_IGN。這樣,當子流程結束時,就不會出現僵屍流程。

  • 上一篇:微信中的小程序存在安全隱患嗎?
  • 下一篇:淺談數據整合技術在水利設計方面的使用成功點?
  • copyright 2024編程學習大全網