如果使用sigkill杀死进程,我该如何让它再次运行?

时间:2010-05-21 13:58:27

标签: perl process kill

我有一个其他进程试图杀死的进程,如果他们设法做到了,我怎样才能确保进程再次运行?

5 个答案:

答案 0 :(得分:4)

结帐inittab。寻找重生:)

  

该过程将重新启动   每当它终止

以下是我自己的inittab中的一个示例:

c1:2345:respawn:/sbin/agetty -8 38400 tty1 linux

c1是一个id( 是唯一的),2,3,4,5是适用的运行级别,respawn说明我之前说过的内容,其余的是一个命令。在那里你可以简单地添加你的命令,它应该运行良好。

答案 1 :(得分:3)

您可以从inittab重新生成,但您无法控制何时以及如何重新启动该进程 - 您必须编辑inittab以停止重新生成。此外,inittab重新生成无法执行任何有关占用大量CPU或RAM资源的锁定进程和过程。您也不会注意到您的进程每两秒重启一次。

您可以使用进程监视守护进程来获得额外的功能和灵活性。监控守护程序允许您向流程控件添加任意复杂的行为。当然,如果你的要求太过分,你可能最终必须编写自己的守护进程。

最好使用满足您需求的现有解决方案。

Monit我取得了不错的成绩。配置语言非常强大,如果需要,你可以做相当复杂的事情。您还可以启用允许您远程停止,启动和禁用进程的Web界面。查看presentation以获取概述。

答案 2 :(得分:2)

信号处理在信号之间有所不同。大多数信号到达目标过程,其中信号处理器可以处理它,例如SIGTERM是kill通常发送的内容。如果使用kill -sigkill(或kill -9,它们是等效的),则信号永远不会到达过程;一旦它可以以对操作系统安全的方式被杀死(如果它在系统调用中忙,它将在系统调用完成时被杀死,因为杀死在内核中运行的线程如果没有释放锁等,模式可能会破坏操作系统。)

因此,无论编程语言如何,进程都无法阻止或从SIGKILL中恢复。

答案 3 :(得分:2)

某些Linux版本(如Ubuntu)更喜欢/etc/event.d而不是inittab。这是一个类似的概念,但实现方式不同。

答案 4 :(得分:-1)

你总是可以提取一个Robin Hood/Friar Tuck的东西,但是现在你可以同时杀死这两个进程。