2015-11-11 75 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的。