我想在Linux环境中找出使用C(运行,睡眠或退出)的进程的状态。确定进程的状态
我对最初如何做到这一点的想法是使用命令ps 12345
调用execv()
,其中12345将是进程ID,然后解析输出以获取STAT。但是,我不认为我可以将它输出到我的程序中,因为它只是自动输出(或者我能吗?)。
我也在想,我可以把过程中的信号,但我还没有找到很好的办法做到这一点,我甚至不知道是否有可能决定以这种方式处理的状态。
所以,我的问题是,我如何确定C中的进程的状态?
我想在Linux环境中找出使用C(运行,睡眠或退出)的进程的状态。确定进程的状态
我对最初如何做到这一点的想法是使用命令ps 12345
调用execv()
,其中12345将是进程ID,然后解析输出以获取STAT。但是,我不认为我可以将它输出到我的程序中,因为它只是自动输出(或者我能吗?)。
我也在想,我可以把过程中的信号,但我还没有找到很好的办法做到这一点,我甚至不知道是否有可能决定以这种方式处理的状态。
所以,我的问题是,我如何确定C中的进程的状态?
在linux中有一个空间分隔的文件,名为/proc/[pid]/stat
。第三个值是进程状态。
例如:
[[email protected] self]$ cat /proc/3529/stat
3529 (bash) S 3528 3529 ......
^
另外,也有是一个/proc/[pid]/status
文件:
[[email protected] 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.status
。
#include"read_proc.h"
int main(void)
{
struct Root * root=read_proc();
printf("state: %c\n",root->first->status);
return 0;
}
这是很好的知道,终端“E公司已经在Linux中被清理得这么好:-) – 2012-02-12 19:31:09
我是相当新的C,这是我用C写的那么第一个程序,'fscanf'会工作为'的fscanf(/ PROC/[PID] /状态, “%s” 时,STR)',其中str是'炭STR [80];',并且这将拾取所述第一串,这将是'名称: '(/ proc/[pid]/status的第一个输出)? – dubyaa 2012-02-12 19:40:51