2010-06-07 90 views
0

我写了一个需要连续运行的程序。但由于我是一个糟糕的程序员,它每隔一段时间就会崩溃。有没有办法让另一个程序监视它并在崩溃时重新启动它?linux - 检查程序是否已经死了

+6

如果因为糟糕的编程而崩溃,那就练习一下,成为一个更好的程序员,并改进你的程序和设计,使其不会崩溃。那么你将不必经历这个过程。 – 2010-06-07 17:33:28

+2

不幸的是,老板喜欢发送这种质量的代码。 – 2010-06-07 17:36:18

+1

@DeSimone - 因为第一次做它比第一次做得更便宜。 – KevinDTimm 2010-06-07 17:39:06

回答

2

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

但是,如果不可能变得更好,只需定期运行一个cron作业,在'ps'的输出中查找您的程序名称。而这个问题的答案可以从superuser.com

1

获得无需第三方程序

所有这一切都可以与Linux inittab中

inittab MAN pages

查找来完成对“重生”

0

既然Stackoverflow是一个编程站点,让我给你一个这样一个观察者将如何实现的概述。

首先要知道的是,你的观察者将不得不自己启动观看的节目。你可以用forkexec来做到这一点。

然后你可以做的是等待程序退出。您可以根据具体需要使用等待系统调用(即waitwaitpidwait4)。你也可以抓住SIGCHLD,这样你可以在你的孩子退出时得到异步通知(然后你需要拨打wait来获得它的状态)。

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

1

您可以使用supervisord

http://supervisord.org/

+0

+1,因为这是Reddit使用的,所以它必须是体面的。 – 2010-06-07 18:27:29

0

它仍然不会持续运行,如果您有其他任务监控它...它仍然有停机时间短量,同时它重新启动。此外,如果您充当网络(或本地)服务器进程,您将失去有关正在进行的请求的任何状态;我希望这是好的(当然你的客户可能有内置超时和重试)。

最后,如果你的进程崩溃,而这是在存储任何持久数据的中间,我希望它有一半的书面文件的应对机制等

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

0

我用Monit观看我的节目和服务。