歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux下調用fork或system啟動子進程的信號和資源釋放相關問題

Linux下調用fork或system啟動子進程的信號和資源釋放相關問題

日期:2017/2/28 16:04:30   编辑:Linux教程

最近一段時間,公司的網管系統二期優化需要新增功能,實現對網管客戶端程序進行保護的監控腳本的自動更新及保護進程的監控告警。網管客戶端程序分為兩部分:客戶端GatherClient及保護進程gatherclient_daemon.py,其中保護腳本由Python編寫,主要功能是實現客戶端進程崩潰或意外被殺死後的自動恢復。目前網管系統支持Windows和Linux平台。下面主要講述在Linux下實現遇到的問題。

為了實現上述的兩功能,需要解決以下兩方面問題:

1、獲取保護腳本進程是否存在。

對Python腳本保護進程的實時監控 ,需要獲取當前系統的進程信息,以判定該進程是否存活。由於py腳本均是由Python二進制模塊以參數的形式加載並產生進程 ,而在系統中的進程名均為python,這樣若系統存在其他py腳本在運行,則無法區分,不過這個問題可能通過獲取進程的參數信息來區分所對應的py腳本(Windows和Linux均可獲取進程參數信息),此處不細述。

2、py腳本的自動更新及加載。

當網管系統服務端有腳本gatherclient_daemon.py的更新時,需要客戶端程序能夠自動下載腳本,並完成對更新後的py腳本的加載啟動。而我們的客戶端由於公司各游戲業務的服務器物理上分布很分散,均為遠程操作,當客戶端程序有版本更新時,會自動下載新程序文件,然後客戶端自動退出,由保護進程gatherclient_daemon.py負責啟動更新後的客戶端進程,因此優先更新py文件並保證正常重新啟動對GatherClient的自動更新功能顯得尤為關鍵。

Linux下啟動一個新進程的方法有:調用fork( ),system( )以啟動子進程的方式實現,其中system( )的系統內部實現也是調用fork( )及Waitpid等。這裡就涉及到Linux下的父子進程產生及資源的繼承關系的問題。

關於fork( )產生子進程的理解,可看下面一段示例及解析:

Copyright © Linux教程網 All Rights Reserved