2011-01-30 48 views

回答

2

在Linux下,您可以檢查僞文件系統/proc以獲取進程信息。這意味着使用opendir()函數集並查找數字的子目錄 - 這些是系統上運行的每個進程的進程標識符。每個子目錄中都有很多文件,只要您的進程具有所需的權限,就可以使用open()/read()打開和讀取這些文件。

PROC(5)

聯機幫助頁提供給你的信息更多的細節。

0

您只需要列出/proc/目錄=)我的question可能對您有些幫助。

+0

在Unix上沒有*文件夾*這樣的東西。 – tchrist 2011-01-30 16:18:24

+0

@tchrist,請詳細說明 – shybovycha 2011-01-30 16:23:36

+0

Unix有目錄,而不是文件夾。文件夾聽起來像嬰兒對我們說話。 – tchrist 2011-01-30 16:30:33

0

沒有找到過程信息的標準;每個Unix供應商都可以提供自己的機制來爲系統管理員提供信息。

Linux和Solaris使用/proc/文件系統將進程信息導出到用戶空間,但我認爲它們完全不兼容。 (我有一個模糊的回憶,Solaris決定以二進制格式導出其所有信息以刪除內核中的處理,代價是將用戶空間程序更緊密地綁定到內核數據結構上。top程序曾經非常擅長窺視內核內存中讀取進程表,我不知道它需要更多的,但也許所有的歷史知識是在仍然出爐。)

如果你想成爲特定於平臺的,在Linux proc(5)幫助頁的信息,您需要。快樂的黑客攻擊。 :)

0

從ps的手冊頁我讀了,您可以使用ps -e列出標準格式的所有進程,並使用ps ax列出所有BSD格式的進程。

希望有所幫助。

1

這是一個完成解決方案。

https://sourceforge.net/p/readproc/code/ci/master/tree/

克隆使用Git,做你想要什麼。

#include"read_proc.h" 
int main(void) 
{ 
    struct Root * root=read_proc(); 
    struct Job * buffer; 
    int i=0; 
    for(;i<root->len;i++) 
    { 
     buffer=get_from_place(root,i); 
     printf("%s\t%u\n",buffer->name,buffer->pid); 
    } 
    return 0; 
} 
1

PSis the standard,是好還是壞。它有許多低估的格式化選項,可以簡化您的跨平臺輸出分析。

/proc更方便,但不便於攜帶,並在本地甚至在支持可能不可用(例如,在的chroot環境)。

相關問題