我试图在linux环境中找出使用C(运行,休眠或退出)的进程状态。
我最初的想法是使用命令execv()
调用ps 12345
,其中12345将是进程ID,然后解析输出以获取STAT。但是,我不认为我可以将其输出到我的程序中,因为它只是自动输出(或者我可以吗?)。
我还在想我可以向进程发送一个信号,但是我没有找到一个很好的方法来做到这一点,我甚至不知道是否有可能以这种方式确定进程状态。 / p>
所以,我的问题是,如何确定C中进程的状态?
答案 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;
}