每个进程的CPU使用情况?

我怎样才能获得每个进程的CPU使用率的百分比? 所以,举例来说,我想运行我的程序prog并获得它的CPU使用情况,例如:

  prog name cpu0 cpu1 cpu2 cpu3 total prog 15 20 45 47 127% 

有这个工具吗? 谢谢。

linux进程资源管理器项目提供了这个功能,你可以在属性对话框中看到每个进程的CPU /内存/ IO图。

在这里输入图像描述

对于Firefox:

 while [ 1 ]; do ps --no-heading -C firefox -L -o command,psr,pcpu|sort -k 2 -n; echo; sleep 1; done 

你不得不总结第三列(我没有看到简单的方法),因为它实际上是向你展示每一个线程。 第一列是名称,第二个处理器,第三个,%cpu。

我认为你可以使用/proc/[pid]/stat/proc/stat来估计这个。

查看如何在Linux中使用PID从C中计算进程CPU使用率的最佳答案? 其中解释了如何计算单个处理器的CPU使用率。

/proc/[pid]/stat得到的最后一个数字的第六位是“处理器%d,最后执行的CPU号”(至少在Ubuntu 12.04上)。

要扩展到多个处理器,您可以在一段时间内对CPU使用率进行抽样,并(非常粗略地)估计每个处理器上的时间比例。 然后使用这些比例分配处理器之间的CPU使用率。 根据/proc/stat的信息,您还可以对每个处理器的总时间进行采样,然后获得所有您需要的变量!

有关proc的更多信息,请参阅http://linux.die.net/man/5/proc

这是我做的一个简单的Python:

 import re,time,sys cpuNum=0 if len(sys.argv)==1: print "use pidcpu <pid1,pid2,..,pidn>" sys.exit(0) pids=sys.argv.pop() def getCpuTot(): global cpuNum f=open("/proc/stat","r") ln=f.read() f.close() #cpu 858286704 148088 54216880 117129864 2806189 5046 16997674 0 0 0 r=re.findall("cpu[\d\s]{1}\s+(\d+)\s(\d+)\s(\d+)\s(\d+)\s.*?",ln,re.DOTALL) cpuNum=len(r)-1 return int(r[0][0])+int(r[0][1])+int(r[0][2])+int(r[0][3]) def getPidCPU(pid): f=open("/proc/"+ str(pid) +"/stat","r") ln=f.readline() f.close() a=ln.split(" ") return int(a[13])+int(a[14]) cpu1=getCpuTot() cpupid1=[] for pid in pids.split(","): cpupid1.append(getPidCPU(pid)) time.sleep(1) cpu2=getCpuTot() cpupid2=[] for pid in pids.split(","): cpupid2.append(getPidCPU(pid)) i=0 for pid in pids.split(","): perc=int(cpuNum*(cpupid2[i]-cpupid1[i])*100/float(cpu2-cpu1)) i+=1 print pid,perc