我有一个其他进程试图杀死的进程,如果他们设法做到这一点,我如何确保该进程将再次运行?
5 回答
查看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 界面。查看演示文稿以获得概述。
信号之间的信号处理不同。大多数信号到达信号处理程序可以处理的目标进程,例如kill
通常发送的SIGTERM。如果kill -sigkill
(或kill -9
,它们是等价的)被使用,则信号永远不会到达进程;该进程会以对操作系统安全的方式尽快被杀死(如果它正忙于系统调用,它将在系统调用完成后立即被杀死,就像杀死在内核中运行的线程一样如果未释放锁等,模式可能会破坏操作系统)。
因此,无论编程语言如何,进程都无法阻止或从 SIGKILL 中恢复。
一些 Linux 版本(如 Ubuntu)更喜欢 /etc/event.d 而不是 inittab。这是一个类似的概念,但不同的实现。
你总是可以拉一个Robin Hood/Friar Tuck的东西,但是现在你可以同时杀死这两个进程。