【问题标题】:If a process is killed with a sigkill how do I make it run again?如果一个进程被 sigkill 杀死,我该如何让它再次运行?
【发布时间】:2010-05-21 13:58:26
【问题描述】:

我有一个进程正试图杀死其他进程,如果他们设法杀死,我如何确保该进程将再次运行?

【问题讨论】:

  • @Marcelo Cantos:太棒了!我得稍后再看看。

标签: perl process kill


【解决方案1】:

查看inittab。寻找重生:)

进程将重新启动 每当它终止时

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

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

c1 是一个 id(必须 是唯一的),2,3,4,5 是适用的运行级别,respawn 说明我之前所说的,其余的是命令。在那里你可以简单地添加你的命令,它应该可以正常工作。

【讨论】:

  • 有趣。我没有想到这一点,我通常只考虑启动设置。我想这可能适用于用户手动启动的进程?对于 Windows,我想他必须将他的进程编写为自动重启的 Windows 进程(我认为这是可能的)...
  • 我也对在 Windows 上执行此操作的方法感兴趣。编辑:我发现了这个:publib.boulder.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic=/… 但还没有测试过。
  • 我认为这是假设他正在运行 WebSphere 服务器,但他甚至没有说这是否是服务器进程。
【解决方案2】:

您可以从inittab 重生,但您几乎无法控制应该何时以及如何重新启动进程——您必须编辑 inittab 才能停止重生。此外,inittab 重生对锁定的进程和消耗大量 CPU 或 RAM 资源的疯狂进程无能为力。您也不会注意到您的进程每两秒重新启动一次。

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

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

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

【讨论】:

    【解决方案3】:

    信号处理不同。大多数信号到达信号处理程序可以处理它的目标进程,例如SIGTERM 这是kill 通常发送的内容。如果使用kill -sigkill(或kill -9,它们是等效的),则信号永远不会到达进程;该进程会以对操作系统安全的方式尽快被杀死(如果它正忙于系统调用,它将在系统调用完成后立即被杀死,就像杀死在内核中运行的线程一样如果未释放锁等,模式可能会破坏操作系统。

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2012-01-31
          • 2014-09-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-09-23
          • 1970-01-01
          • 1970-01-01
          • 2015-11-26
          相关资源
          最近更新 更多