我尝试使用C/C++编写程序,其行为与Linux中的top命令类似。 我已经做了一些研究,并且已经知道如何计算一个进程的CPU使用率。我们可以通过在当前时间和几秒后从/ proc/[PID]/stat计算stime + utime来获得CPU使用率。然后计算stime + utime差异并将结果与正常运行时间差异分开,然后获得CPU使用率百分比。单进程/多线程进程将非常简单。如何统计Linux中多进程应用程序的CPU使用情况
问题出现在httpd这样的情况下,它作为多进程工作。当web服务器忙时,httpd将fork子进程来服务一堆请求。然后我计算总进程的数量,比方说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
如果你看一下上面的例子中,表准时+ UTIME的增量将导致负值,因为过程的数量减少,并给几个毫秒之后的下限值。我只想知道,有没有其他方法可以计算这样的过程?谢谢。
你怎么知道这套过程?通过它的流程组?通过程序的名称? – 2012-01-11 08:03:35
首先,我得到主父进程。我知道,因为它有ppid 1,我们说它的pid 1227.然后,搜索整个/ proc /目录,其中有ppid 1227.如果/ proc/pid1/stat有ppid 1227,那么我将它的utime和stime添加到1227年的时候和stime。 – 2012-01-11 08:08:13