确定进程的状态

时间:2012-02-12 19:27:25

标签: c linux process operating-system

我试图在linux环境中找出使用C(运行,休眠或退出)的进程状态。

我最初的想法是使用命令execv()调用ps 12345,其中12345将是进程ID,然后解析输出以获取STAT。但是,我不认为我可以将其输出到我的程序中,因为它只是自动输出(或者我可以吗?)。

我还在想我可以向进程发送一个信号,但是我没有找到一个很好的方法来做到这一点,我甚至不知道是否有可能以这种方式确定进程状态。 / p>

所以,我的问题是,如何确定C中进程的状态?

3 个答案:

答案 0 :(得分:8)

在linux中有一个名为/proc/[pid]/stat的空格分隔值文件。第三个值是过程状态。

例如:

[cnicutar@fresh self]$ cat /proc/3529/stat
3529 (bash) S 3528 3529 ......
            ^

或者,还有一个/proc/[pid]/status文件:

[cnicutar@fresh self]$ cat /proc/3529/status
Name:   bash
State:  S (sleeping)
....................

我只会在fscanf上使用stat

答案 1 :(得分:2)

如果要解析命令的输出,请使用popen

我想有一种更简单的方法可以做到这一点,必须有一个C API来访问流程信息......(注意:还有/proc/12345/status

答案 2 :(得分:1)

看看这个:http://sourceforge.net/p/readproc/code/ci/master/tree/

您可以使用struct Job.status

#include"read_proc.h"
int main(void)
{
   struct Root * root=read_proc();
   printf("state: %c\n",root->first->status);
   return 0;
}