一尘不染

如何在Linux中计算一个进程及其所有子进程的CPU使用率?

linux

我想知道一个固定时间段内一个进程和所有子进程的CPU使用率。

更具体地说,这是我的用例:

有一个过程在等待用户执行程序的请求。为了执行程序,该进程调用子进程(一次最多5个),并且每个子进程执行这些已提交程序中的1个(假设用户一次提交了15个程序)。因此,如果用户提交15个程序,则将运行3批,每批5个子进程。子进程在完成程序执行后立即被杀死。

我想知道在执行这15个程序期间,父进程及其所有子进程的CPU使用率%。

有没有简单的方法可以使用top或其他命令来执行此操作?(或者我应该附加到父进程的任何工具。)


阅读 691

收藏
2020-06-03

共1个答案

一尘不染

您可以/proc/PID/stat在PID是父进程的进程ID的位置找到此信息。假设父进程正在等待其子进程,则可以从 utimestime
cutimecstime 计算出CPU的总使用量:

utime%lu

在用户模式下已安排此过程的时间,以时钟滴答数为单位(除以sysconf(_SC_CLK_TCK)。这包括来宾时间,guest_time(运行虚拟CPU所花费的时间,请参见下文),以便应用程序不知道访客时间字段中的,不会因其计算而浪费时间。

stime%lu

在内核模式下已计划此过程的时间,以时钟滴答数为单位(除以sysconf(_SC_CLK_TCK))。

可爱%ld

该进程的等待子进程已在用户模式下安排的时间量,以时钟滴答数为单位(除以sysconf(_SC_CLK_TCK)。(另请参见times(2)。))包括来宾时间cguest_time(运行虚拟设备所花费的时间)
CPU,请参见下文)。

cstime%ld

已在内核模式下调度了此进程的等待子进程的时间,以时钟滴答数为单位(除以sysconf(_SC_CLK_TCK))。

有关详细信息,请参见proc(5)联机帮助页

2020-06-03