【发布时间】:2010-05-21 13:58:26
【问题描述】:
我有一个进程正试图杀死其他进程,如果他们设法杀死,我如何确保该进程将再次运行?
【问题讨论】:
-
@Marcelo Cantos:太棒了!我得稍后再看看。
我有一个进程正试图杀死其他进程,如果他们设法杀死,我如何确保该进程将再次运行?
【问题讨论】:
查看inittab。寻找重生:)
进程将重新启动 每当它终止时
这是我自己的 inittab 中的一个示例:
c1:2345:respawn:/sbin/agetty -8 38400 tty1 linux
c1 是一个 id(必须 是唯一的),2,3,4,5 是适用的运行级别,respawn 说明我之前所说的,其余的是命令。在那里你可以简单地添加你的命令,它应该可以正常工作。
【讨论】:
您可以从inittab 重生,但您几乎无法控制应该何时以及如何重新启动进程——您必须编辑 inittab 才能停止重生。此外,inittab 重生对锁定的进程和消耗大量 CPU 或 RAM 资源的疯狂进程无能为力。您也不会注意到您的进程每两秒重新启动一次。
您可以使用进程监控守护程序来获得额外的功能和灵活性。监视守护程序允许您将任意复杂的行为添加到您的过程控制中。当然,如果你的要求太过分了,你最终可能不得不编写自己的守护进程。
最好使用满足您需求的现有解决方案。
我使用Monit 取得了不错的成绩。配置语言非常强大,如果需要,您可以做相当复杂的事情。您还可以启用允许您远程停止、启动和禁用进程的 Web 界面。查看presentation 了解概览。
【讨论】:
信号处理不同。大多数信号到达信号处理程序可以处理它的目标进程,例如SIGTERM 这是kill 通常发送的内容。如果使用kill -sigkill(或kill -9,它们是等效的),则信号永远不会到达进程;该进程会以对操作系统安全的方式尽快被杀死(如果它正忙于系统调用,它将在系统调用完成后立即被杀死,就像杀死在内核中运行的线程一样如果未释放锁等,模式可能会破坏操作系统。
因此,无论编程语言如何,进程都无法阻止或从 SIGKILL 中恢复。
【讨论】:
某些 Linux 版本(如 Ubuntu)更喜欢 /etc/event.d 而不是 inittab。这是一个类似的概念,但实现方式不同。
【讨论】:
你总是可以拉一个Robin Hood/Friar Tuck的东西,但是现在你可以同时杀死两个进程。
【讨论】: