我想在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