我尝试用 C/C++ 编写一个程序,使其表现得像 Linux 中的 top 命令。我已经做了一些研究,并且已经知道如何计算进程的 CPU 使用率。我们可以通过 /proc/[PID]/stat 在当前时间和几秒后计算 stime + utime 来获得 CPU 使用率。然后计算 stime + utime 的差异,并将结果除以 uptime 差异,然后我们得到 CPU 使用百分比。在单进程/多线程进程上会很容易。
问题在于像 httpd 这样的情况,它作为多进程工作。当网络服务器繁忙时,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 的增量将导致负值,因为进程数减少,并在几毫秒后给出较低的值。我只是想知道,有没有其他方法可以计算这样的过程行为?谢谢你。