如何确定进程的状态(即它是否是一个僵尸)

Til*_*ütz 2 c linux process zombie-process

如何在Linux下使用C获取有关进程状态的信息(即,如果它是僵尸)?

在阅读了答案之后,我想稍微缩小我的问题:我更喜欢纯C解决方案.在阅读了ps源码(读取/ proc /)后,我认为应该有更好的方法并在这里问:)

Jas*_*n L 7

您将想要了解通过典型的C标准库调用与/ proc /"psuedo-filesystem"进行交互.任何Linux发行版都包含了入门所需的文档,并且是一个简单的谷歌搜索.

(现在你知道要搜索什么了.我知道这通常是挑战的大部分!)

简而言之,正在运行的Linux系统的/ proc /目录中的目录和文件反映了正在运行的内核的状态,它自然地包括进程.但是,在收费之前,您需要记住一些信息.

僵尸进程与孤立进程不同.孤立进程是在进程'父进程未正确退出后仍处于等待状态的进程.僵尸进程是一个已正确退出,释放其所有资源但正在进程表中保留位置的进程.

这通常发生在程序启动进程时.你看,在父程序正确获取子进程的返回状态之前,内核不会删除进程表中已完成的子进程的条目.那讲得通; 如果子进程退出不正确,父程序还能知道怎么回事?

因此,所有子过程在技术上都是僵尸至少很短的时间.程序进入本身并不是一个糟糕的状态.

实际上,"僵尸"有时是故意创造的.例如,有时僵尸条目由程序保留一段时间,以便进一步启动的进程不会获得与先前启动(现在是僵尸)进程相同的PID.

换句话说,如果你不必要地进行SIGCHLDing僵尸进程,你可能会对产生程序造成严重问题.但是,如果一个进程已经僵尸半小时或更长时间,那么它可能是一个错误的迹象.

编辑:问题在我身上发生了变化!不,没有比ps更简单的方法.如果有的话,它很久以前就会被整合到ps中./ proc文件是有关内核状态信息的全部源代码.:)