linux - 检查程序是否已经死亡

时间:2010-06-07 17:30:22

标签: linux

我写了一个需要不断运行的程序。但由于我是一个糟糕的程序员,它经常崩溃。有没有办法让另一个程序看到它并在崩溃时重新启动它?

6 个答案:

答案 0 :(得分:2)

不是似是而非,但如果你是一个糟糕的程序员,那么你的观看编程也不会失败;并且,你应该变得更好,这样你就不会有这个问题(因为这个原因) 。也就是说,您最终可能需要以下答案。

但是,如果无法改善,只需定期运行一个cron作业,在'ps'的输出中查找程序的名称。您可以从superuser.com获得答案

答案 1 :(得分:1)

无需第三方程序

所有这一切都可以通过linux inittab

完成

inittab MAN pages

寻找“respawn”

答案 2 :(得分:1)

您可以使用supervisord

http://supervisord.org/

答案 3 :(得分:0)

由于Stackoverflow是一个编程站点,让我概述一下这样一个观察器的实现方式。

首先要知道的是,您的观察者必须自己启动观看的节目。您可以使用forkexec执行此操作。

然后你可以做的就是等待程序退出。您可以根据具体需要使用等待系统调用(即waitwaitpidwait4)。您还可以捕获SIGCHLD,以便在您的孩子退出时获得异步通知(然后您需要致电wait以获取其状态)。

现在您已拥有状态,您可以判断该进程是否因宏信号WIFSIGNALED而死亡。如果该宏返回true,则程序崩溃并需要重新启动。

答案 4 :(得分:0)

如果你有另一个监控它的任务,它仍然不会继续运行......它重启时仍会有很短的停机时间。

此外,如果您充当网络(或本地)服务器进程,您将失去有关正在进行的请求的任何状态;我希望这没关系(当然你的客户可能有内置的超时和重试)。

最后,如果您的进程在存储任何持久数据的过程中崩溃,我希望它有一个处理半写文件的机制等。

但是,如果你想要它是健壮的,那么所有这些事情都应该是真的,所以你可以安全地使用像supervisord这样的东西。

答案 5 :(得分:0)

我使用Monit来监视我的程序和服务。