簡體   English   中英

linux-檢查程序是否已終止

[英]linux - check if program has died

我寫了一個需要連續運行的程序。 但是由於我是一個糟糕的程序員,它經常崩潰。 有沒有辦法讓另一個程序監視它並在崩潰時重新啟動它?

別懷疑,但是如果您是一個不好的程序員,那說明您的觀看編程也不會失敗;)而且,您應該變得更好,這樣就不會遇到這個問題(由於這個原因)。 也就是說,您最終可能需要以下答案。

但是,如果不可能變得更好,則只需定期運行cron作業,即可在“ ps”的輸出中查找程序的名稱。 您可以從superuser.com獲得該答案

無需第三方計划

所有這些都可以通過linux inittab來完成

inittab手冊頁

尋找“重生”

您可以使用supervisord

http://supervisord.org/

由於Stackoverflow是一個編程站點,因此讓我概述如何實現這種觀察程序。

首先要知道的是,您的觀察者必須自己啟動被觀察的程序。 您可以使用forkexec

然后,您可以等待程序退出。 您可以根據自己的特定需求使用wait系統調用(即waitwaitpidwait4 )。 您還可以捕獲SIGCHLD以便在孩子退出時獲得異步通知(然后,您需要調用wait來獲取其狀態)。

有了狀態后,您就可以通過宏WIFSIGNALED判斷該進程是否由於信號而WIFSIGNALED 如果該宏返回true,則您的程序崩潰了,需要重新啟動。

如果您有另一個任務監視它,它仍然不會連續運行...在重新啟動時,它仍然會有很短的停機時間。

此外,如果您充當網絡(或本地)服務器進程,則將丟失有關正在進行的請求的任何狀態; 我希望可以(當然,您的客戶可能內置了超時並重試)。

最后,如果您的進程在存儲任何持久數據的過程中崩潰了,我希望它具有處理半寫文件等的機制。

但是,如果您打算使其健壯,那么所有這些事情都應該是正確的,因此您可以安全地使用諸如supervisor。

我使用Monit監視我的程序和服務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM