2015-11-11 76 views
0

bash腳本我需要寫腳本,它返回文件,有關CPU,並通過給定的時間段指定進程的內存使用情況的信息。 當我用ps -p PID我只得到一個CPU核心的使用率,當我用上面我得到的二進制文件作爲輸出。我嘗試了下一步:對內存和CPU使用率

while :; 
    top -n 1 -p pid | awk '{ print $9" "$10 }' 
    sleep 10; 
    done 
+3

請參見[這個答案](http://stackoverflow.com/questions/16726779/how-do-i-get-the-total-cpu-usage-of-an-application-from-proc-pid-統計)。這個問題之前已經被問到。 – ojblass

回答

0

內核爲進程提供的信息位於/ proc文件系統中。首先你需要解析這兩個文件,以獲得相關數據的腳本

的/ proc /(PID)/狀態
的/ proc /(PID)/ STAT

This線程描述讓這個CPU數據詳細,所以我不會在這裏。

我想你會發現這個問題是一個進程的CPU用量不分解成你的系統上提供的各種內核,而是歸納爲一個數字,接近100%*(核數)。最接近這個的是頂部(選項f,J)的「最後使用的處理器」列,儘管這很難解決您的問題。類似於this線程中的分析工具可能是最終答案。

我不知道你的環境或requrements;然而,解決方案可能只運行機器上隔離的進程,然後在系統級收集每個核心CPU使用率,鬆散地表示進程需求。

0

試試這個:

$PID=24748; while true; do CPU=$(ps H -q $PID -eo "pid %cpu %mem" | grep $PID | cut -d " " -f 3 | sed -e 's/$/\+/' | tr -d "\n" | sed -e 's/+$/\n/' | bc) && MEM=$(ps H -q $PID -eo "pid %cpu %mem" | grep $PID | cut -d " " -f 4 | head -n 1) && echo $PID $CPU $MEM && sleep 3; done 

它基本上只是增加了BC每個線程的CPU%使用率,佔用內存使用量(作爲一個整體),並將它們打印,指定PID的。