이것은 작은 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
통화를 결합합니다.