지정된 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통화를 결합합니다.

관련 정보