2012-02-12 47 views
2

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

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

我也在想,我可以把过程中的信号,但我还没有找到很好的办法做到这一点,我甚至不知道是否有可能决定以这种方式处理的状态。

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

回答

8

在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

+0

这是很好的知道,终端“E公司已经在Linux中被清理得这么好:-) – 2012-02-12 19:31:09

+0

我是相当新的C,这是我用C写的那么第一个程序,'fscanf'会工作为'的fscanf(/ PROC/[PID] /状态, “%s” 时,STR)',其中str是'炭STR [80];',并且这将拾取所述第一串,这将是'名称: '(/ proc/[pid]/status的第一个输出)? – dubyaa 2012-02-12 19:40:51

2

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

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