操作系统是否可以重新启动陷入无限循环的进程?

时间:2013-04-27 08:04:26

标签: linux unix

前几天,在Linux服务器上进行测试时,我们观察到在某些情况下,一个进程可能会死亡,然后再次启动。检查代码后,我们发现它是由无限循环引起的。

这引起了我的好奇心,这个过程是如何死亡然后开始的?操作系统是否检测并确定异常进程并重新启动?如果是,那该怎么办?

2 个答案:

答案 0 :(得分:4)

假设您无法修复代码......让我们忽略所有疯狂的选项,例如通过脚本附加gdb等。

您可以检查CPU使用率(大多数意外无限循环,我已经完成了100%的CPU使用了几个小时:)),或者(更有可能的选择)使用strace来检查软件现在正在做什么并实现自己的签名跟踪(如果这20个API重复20次,让我们假设无限循环左右)。

例如:

#!/bin/bash
strace -p`cat your_app.pid` | ./your_signature_evaluator
# Or
strace -p12345 | ./your_signature_evaluator

至于自动系统识别......程序在循环调用循环后失控(例如malloc(),直到耗尽内存,打开文件......)似乎是正常的,但我已经(并且正确)我在评论中,如果我错了)从未见过系统(内核)重启应用程序。我想你也是:

  • 在程序内有条件(信号处理,无论如何),有助于恢复
  • 您正在运行监视程序(检查<pid>正在运行的每20秒,如果没有启动新实例)
  • 您正在运行提供服务/程序配置的分发,如果已停止重新启动

但我真的怀疑Linux对你自己的应用程序是如此的好。

答案 1 :(得分:0)

如果编写该内核的人可以解决halting problem

PS:Vytor - Web服务器处于无限循环中,不使用100%CPU。