[英]linux - check if program has died
我寫了一個需要連續運行的程序。 但是由於我是一個糟糕的程序員,它經常崩潰。 有沒有辦法讓另一個程序監視它並在崩潰時重新啟動它?
別懷疑,但是如果您是一個不好的程序員,那說明您的觀看編程也不會失敗;)而且,您應該變得更好,這樣就不會遇到這個問題(由於這個原因)。 也就是說,您最終可能需要以下答案。
但是,如果不可能變得更好,則只需定期運行cron作業,即可在“ ps”的輸出中查找程序的名稱。 您可以從superuser.com獲得該答案
您可以使用supervisord
由於Stackoverflow是一個編程站點,因此讓我概述如何實現這種觀察程序。
首先要知道的是,您的觀察者必須自己啟動被觀察的程序。 您可以使用fork
和exec
。
然后,您可以等待程序退出。 您可以根據自己的特定需求使用wait系統調用(即wait
, waitpid
或wait4
)。 您還可以捕獲SIGCHLD
以便在孩子退出時獲得異步通知(然后,您需要調用wait
來獲取其狀態)。
有了狀態后,您就可以通過宏WIFSIGNALED
判斷該進程是否由於信號而WIFSIGNALED
。 如果該宏返回true,則您的程序崩潰了,需要重新啟動。
如果您有另一個任務監視它,它仍然不會連續運行...在重新啟動時,它仍然會有很短的停機時間。
此外,如果您充當網絡(或本地)服務器進程,則將丟失有關正在進行的請求的任何狀態; 我希望可以(當然,您的客戶可能內置了超時並重試)。
最后,如果您的進程在存儲任何持久數據的過程中崩潰了,我希望它具有處理半寫文件等的機制。
但是,如果您打算使其健壯,那么所有這些事情都應該是正確的,因此您可以安全地使用諸如supervisor。
我使用Monit監視我的程序和服務。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.