确定一个过程的状态

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

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

我也在想,我可以给这个过程发送一个信号,但我还没有find一个好的方法来做到这一点,我甚至不知道是否可以用这种方式来确定过程状态。

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

在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) .................... 

我只会在stat上使用fscanf

如果你想分析一个命令的输出,使用popen

我想有一个更简单的方法来做到这一点,必须有一个C API来访问过程信息…(注意:也有/proc/12345/status

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

你可以使用struct Job.statusstruct Job.status这一点。

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