是否可以从 shell 获取僵尸进程的退出状态?

是否可以从 shell 获取僵尸进程的退出状态?

如果我在 shell 中执行“ps”命令,我可以获得标记为“”的某些进程 - 它们已退出,但父进程尚未收到它们的退出状态。有时,在调试网络应用程序时,我需要从 shell 获取此类进程的退出状态 - 它是 0 还是某些错误代码(如分段错误)?

是否有可能从给定的 shell 获取此退出状态PID,或者只有僵尸的父进程可以获得此退出状态?

PS 我不需要“杀死”它们,“关闭”它们等等。我只需要检查它们的退出状态:)

答案1

僵尸进程的定义是一个完成执行的进程,但它仍有其退出状态要报告给它的父进程(显然已经不存在了),因此,内核会将其保留在进程表中,它不再被安排进一步执行,但不能被删除,也不允许重新使用 PID,直到确定退出状态不再需要。

因此,根据此定义,如果您“收到”退出代码,则您完全解决了僵尸进程。您需要一个可以访问内核结构的内核模块。通常只有父进程或 init 可以从 waitpid() 读取值,但我记得在较新的内核中,有一种方法可以让进程“控制器”取代 init,即它们将收养这样的子进程,因此如果您不介意杀死父进程……这也是一种可行的方法。

我查看了 /proc 以查看是否可以从那里挖掘出某些东西,但由于退出代码的性质,它不会在那里显示......

答案2

/proc/pid/stat退出代码可用5b172087f99189416d5f47fd7ab5e6fb762a9ba3,当这个问题被问到时,它可能太新了......:)

现在您可以从 中的最后一个数字获取退出代码/proc/pid/stat

相关内容