2012-02-12 86 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