如何获取有关指定 pid 的所有统计信息?例如跑了多长时间? CPU、内存、磁盘和网络的最大/最小/平均使用率?

如何获取有关指定 pid 的所有统计信息?例如跑了多长时间? CPU、内存、磁盘和网络的最大/最小/平均使用率?

这是一个小型 C++ 应用程序

#include <iostream>
#include <unistd.h>

using namespace std;

int main()
{
    cout<<"Hello World"<<endl;
    std::cout << "pid = " << getpid() << '\n';

    return 0;
}

它只是简单地打印一个字符串和应用程序的 pid。

我如何获得有关此 pid 的所有统计信息?例如,它运行了多长时间? cpu、内存、磁盘和网络的最大、最小和平均使用率是多少?

注意:当我获得 pid 时,应用程序已完成,这意味着/proc/PID/无法工作。

$ ./a.out
Hello World
pid = 19691                   
$ cd /proc/19691
-bash: cd: /proc/19691: No such file or directory

答案1

如果要测量其资源使用情况的进程是进行测量的进程的子进程,则这是可能的:您需要另一个程序来运行您的a.out,等待它,然后调用getrusage:

struct rusage rusage;
getrusage(RUSAGE_CHILDREN, &rusage);

这将rusage用所有已终止并等待的调用者子级的聚合资源使用情况来填充该结构。

在 Linux 上你可以使用系统wait4调用将等待和针对儿童的getrusage呼叫结合起来。

相关内容