繁体   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