我有一個Linux [1]管理的一系列第三方守護進程與互動僅限於外殼的系統[2] init腳本,即只有{啓動|重新啓動|停止|狀態}可用。
問題:
進程可以假定一個先前運行的進程的PID,的進程的狀態是通過檢查運行的進程與它的PID的存在進行檢查。
例:
方法A運行與PID 123,隨後模具,處理B初始化與PID 123和狀態命令與不可信(錯誤)響應 「OK」。換句話說,我們只檢查PID中是否存在進程來驗證進程是否正在運行,我們假設如果存在具有此PID的進程,則這是所討論的進程。
提出的解決方案:
- 訊問過程中,使用PID,以確保運行作爲PID是如預期命令/守護進程。這個解決方案的問題是命令和PID都需要匹配;因此需要保持多位信息並保持同步,並且增加了錯誤/邊緣條件的複雜性。
- 將PID文件的創建時間與進程的開始時間相關聯,如果進程在PID文件創建時間的某個增量範圍內,我們可以確定命令/守護進程運行如期。
除了使用該PID運行的進程以外,是否有一種標準方法來批准進程/ PID文件的真實性?即我(作爲系統)想知道你(過程)是否在運行,如果你是我認爲你是誰(A而不是B)。
假設我們已經選擇實施上面提出的第二種解決方案,PID創建時間和過程開始時間之間的置信區間/增量是合理的嗎?在這裏,合理的方法可以接受類型1 /類型2錯誤之間的妥協。
[1]的CentOS/RHEL [2]擊
不應該在[ServerFault](http://serverfault.com/)上? – Graham
您可以對第三方守護進程本身進行任何更改嗎?如果是這樣,您可以使用'flock'爲守護進程創建一些文件系統鎖。 –
你確定過程ID一次被重用嗎?我知道Windows就是這種情況,但我沒有在Linux或UNIX上觀察到這種情況。請參閱http://stackoverflow.com/questions/3446727/how-does-linux-determine-the-next-pid – cdarke