[英]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.