我寫了一個需要連續運行的程序。但由於我是一個糟糕的程序員,它每隔一段時間就會崩潰。有沒有辦法讓另一個程序監視它並在崩潰時重新啓動它?linux - 檢查程序是否已經死了
0
A
回答
2
不是很清楚,但是如果你是一個糟糕的程序員,那麼你的觀看編程也不會失敗;),你應該變得更好,這樣你纔不會有這個問題(因爲這個原因)。也就是說,你最終可能需要下面的答案。
但是,如果不可能變得更好,只需定期運行一個cron作業,在'ps'的輸出中查找您的程序名稱。而這個問題的答案可以從superuser.com
1
0
既然Stackoverflow是一個編程站點,讓我給你一個這樣一個觀察者將如何實現的概述。
首先要知道的是,你的觀察者將不得不自己啓動觀看的節目。你可以用fork
和exec
來做到這一點。
然後你可以做的是等待程序退出。您可以根據具體需要使用等待系統調用(即wait
,waitpid
或wait4
)。你也可以抓住SIGCHLD
,這樣你可以在你的孩子退出時得到異步通知(然後你需要撥打wait
來獲得它的狀態)。
現在您已擁有狀態,可以通過宏信號WIFSIGNALED
來判斷進程是否因信號而死亡。如果該宏返回true,則程序崩潰並需要重新啓動。
1
0
它仍然不會持續運行,如果您有其他任務監控它...它仍然有停機時間短量,同時它重新啓動。此外,如果您充當網絡(或本地)服務器進程,您將失去有關正在進行的請求的任何狀態;我希望這是好的(當然你的客戶可能有內置超時和重試)。
最後,如果你的進程崩潰,而這是在存儲任何持久數據的中間,我希望它有一半的書面文件的應對機制等
但是,如果你想它是健壯的,所有這些東西都應該是真的,所以你可以安全地使用像supervisord這樣的東西。
0
我用Monit觀看我的節目和服務。
相關問題
- 1. Linux互斥鎖檢查程序是否已經在運行?
- 2. 檢查是否已經加載了
- 3. ColdFusion ColdFire項目是否已經死了?
- 4. 是否已經死亡?
- 5. 它已經死了
- 6. 確定過程是否已經死亡?
- 7. 如何檢查用戶是否已經購買了應用程序?
- 8. 我的龜已經死了
- 9. Akka Routing:Recipient Actor已經死了
- 10. Tensorflow,節點已經死了
- 11. 檢查第三方應用程序是否已經打開
- 12. 檢查啓動文件夾是否已經包含程序
- 13. 如何檢查一個程序是否已經退出C#
- 14. 檢查應用程序是否已經運行
- 15. 要檢查Linux中是否安裝了軟件/應用程序
- 16. 我可以檢測Android是否已經從Notification Intent/PendingIntent中殺死了應用程序(任務進程)?
- 17. 檢查magento是否已經運行cronjob
- 18. rake檢查是否已經運行
- 19. 檢查GLUT是否已經初始化?
- 20. 檢查jQuery「Fancybox」是否已經註冊?
- 21. 檢查CountDown是否已經運行
- 22. 檢查文件是否已經打開
- 23. Rails,檢查url是否已經存在
- 24. MySQL檢查表是否已經存在
- 25. 檢查SPListItem是否已經存在
- 26. 檢查值是否已經退出
- 27. 檢查cronjob是否已經運行
- 28. 檢查mysql表是否已經存在
- 29. 檢查ViewController是否已經在後臺
- 30. 檢查數據是否已經存在
如果因爲糟糕的編程而崩潰,那就練習一下,成爲一個更好的程序員,並改進你的程序和設計,使其不會崩潰。那麼你將不必經歷這個過程。 – 2010-06-07 17:33:28
不幸的是,老闆喜歡發送這種質量的代碼。 – 2010-06-07 17:36:18
@DeSimone - 因爲第一次做它比第一次做得更便宜。 – KevinDTimm 2010-06-07 17:39:06