我试图用C/C++编写一个程序,使其像Linux中的top命令一样运行。
我已经进行了一些研究,已经知道如何计算进程的CPU使用率。我们可以通过计算/proc/[PID]/stat中的stime + utime在当前时间和几秒钟后来获取CPU使用情况。然后计算stime + utime差异并将结果除以uptime差异,然后我们就得到了CPU使用百分比。对于单个进程/多线程进程,这将非常容易。
问题出现在像httpd这样的多进程情况下。当Web服务器繁忙时,httpd会派生子进程来服务大量请求。然后我计算总进程数,假设为500。我想计算这些进程的CPU使用率,但是将它们汇总起来,所以我只看到1个httpd CPU使用率。但是,如果我按照上面提到的算法进行计算,当进程数量在几秒钟后减少到<500时,我会得到负值,因为计算将如下(例如,我随意选择了一个数字,只是为了给您简要描述):
Uptime: 155123, No of processes : 500, Stime + Utime total of 500 processes : 3887481923874
Uptime: 155545, No of processes : 390, Stime + Utime total of 390 processes : 2887123343874
如果您看上面的例子,Stime + Utime的差将产生负值,因为进程数量在减少,并且在几毫秒后给出较低的值。我只想知道是否有其他计算方式来处理这种进程行为?谢谢。