2009-04-24 55 views
2

有沒有辦法一般地檢索使用Perl或Python的流程統計信息?我們可以保持它的Linux特定。有沒有辦法使用Perl或Python檢索進程統計信息?

有幾個問題:我不會提前知道PID,但我可以從腳本本身運行有問題的進程。例如,我有沒有問題,這樣做的:

./myscript.pl some/process/I/want/to/get/stats/for

基本上,我想,最起碼,得到進程的內存消耗,但更多的信息,我可以得到更好的(如進程的運行時間,進程的平均CPU使用率等)

謝謝。

+0

A [類似的問題(http://stackoverflow.com/questions/629161/how幾周前[szagab](http://stackoverflow.com/users/11827/szabgab)詢問了這個問題。 – innaM 2009-04-24 13:29:18

回答

7

查看Proc::ProcessTable模塊,該模塊返回有關係統中進程的相當多信息。調用「fields」方法以獲取可從每個進程中提取的詳細信息列表。

我最近發現了上面的模塊,它剛剛替換了我爲編寫Linux的Perl kill程序時編寫的Process模塊​​。你可以看看我的腳本here

它可以很容易地擴展到從ps命令中提取更多信息。例如。 'getbycmd'方法返回一個pid列表,其命令行調用與傳遞的參數匹配。然後,您可以通過調用細節‘getdetail通過傳遞PID給它像這樣檢索特定的過程’,

my $psTable = Process->new(); 

# Get list of process owned by 'root' 
for my $pid ($psTable->getbyuser("root")) { 

    $psDetail = $psList->getdetail($pid); 
    # Do something with the psDetail.. 

} 
2

如果你是fork()孩子,你會知道它是PID。

從家長內部,您可以解析/proc/<PID/中的文件以檢查內存和CPU使用情況,儘管只要孩子進程正在運行即可。

1

一個常見的誤解是閱讀/ proc就像閱讀/家庭。/proc旨在爲您提供與open()相同的信息,20個填充某些結構的類似系統調用可以提供。讀它不會污染緩衝區,將無辜的程序發送到分頁地獄或以其他方式促成小貓死亡。

訪問的/ proc/foo的就是告訴內核「給我富,我可以在一個語言無關的方式來處理信息」

如果你需要的是更多的細節在/ proc/{PID}/,更新你的問題,我會發布他們。

+1

閱讀proc/{pid} /我沒有問題。但是,一旦子進程終止,proc/{pid} /不見了,不是嗎?我完成之前如何確保它在那裏? – FreeMemory 2009-04-24 13:35:36

相關問題