4

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

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

4

2 回答 2

4

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

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

例如:

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

至于自动系统识别......在无法控制的循环中调用事物后程序崩溃似乎很正常(例如malloc(),直到你耗尽内存,打开文件......),但我已经(如果我错了,请在评论中纠正我)从未见过系统(内核)重新启动应用程序。我认为你要么:

  • 在程序内部有有助于恢复的条件(信号处理等)
  • 您正在运行看门狗(每 20 秒检查一次<pid>正在运行的情况,如果没有启动新实例)
  • 您正在运行提供服务/程序配置的发行版,如果停止则重新启动

但我真的怀疑 Linux 本身是否会对您的应用程序如此友好。

于 2013-04-27T08:12:57.490 回答
0

如果可以的话,编写该内核的人将解决停机问题

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

于 2013-04-27T08:24:24.833 回答