我如何可以获得信息的状态的过程(即如果它是一个僵尸)使用C Linux下?

在阅读了回答到目前为止,我想缩小我的问题有点:我会更喜欢一个纯粹C的解决方案。在阅读ps源(其中读/proc/),我认为应该有一个更好的方式并要求在这里:)

有帮助吗?

解决方案

你想学习与/ proc / <!>“psuedo-filesystem <!>”进行交互。通过典型的C标准库调用。任何Linux发行版都包含了入门所需的文档,并且是一个简单的谷歌搜索。

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

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

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

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

因此,所有子过程在技术上都是僵尸至少很短的时间。对于一个程序而言,这并不是一个糟糕的状态。

确实,<!>“zombies <!>”;有时是故意创造的。例如,有时僵尸条目由程序保留一段时间,以便进一步启动的进程不会获得与先前启动(现在是僵尸)进程相同的PID。

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

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

其他提示

我知道只有两个办法:

  • 解析出的 ps 命令
  • 阅读文件/proc/PID,其中PID是处理标识符(也就是什么 ps 不境内)

您希望机器上运行的进程使用

$ ps aux

ps 显示有关所选活动进程的信息。如果您想重复更新选择和显示的信息,请改用顶部

发现此处

Use this command to display all of your zombie processes:

ps aux | awk '{ print $8 " " $2 }' | grep -w Z

这可以使用C。

轻松解析

伪文件系统/ proc正在描述内核内部数据结构,并为您提供直接更改某些值的机会。 使用I / O C函数可以轻松实现获取特定进程的状态。要解析的正确文件是: / proc / {PID} / status

下面的命令可用于获取Zombie状态的进程。

for proc in $(echo /proc/[0-9]*);do if [[ $(sed -n '/^State:\tZ/p' ${proc}/status 2>/dev/null) ]];then basename $proc;fi;done
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top