8.6. Функция getrusage(): статистика процессов
8.6. Функция getrusage(): статистика процессов
Функция getrusage() запрашивает у ядра статистику работы процессов. Если первый аргумент функции равен RUSAGE_SELF, процесс получит информацию о самом себе. Если же первым аргументом является константа RUSAGE_CHILDREN, будет выдана информация обо всех его завершившихся дочерних процессах. Второй аргумент — это указатель на структуру типа rusage, в которую заносятся статистические данные.
Перечислим наиболее интересные поля этой структуры.
? ru_utime. Здесь находится структура типа timeval, в которой указано, сколько пользовательского времени (в секундах) ушло на выполнение процесса. Это время, затраченное центральным процессором на выполнение программного кода, а не системных вызовов.
? ru_stime. Здесь находится структура типа timeval, в которой указано, сколько системного времени (в секундах) ушло на выполнение процесса. Это время, затраченное центральным процессором на выполнение системных вызовов от имени данного процесса.
? ru_maxrss. Это максимальный объем физической памяти, которую процесс занимал в какой-то момент своего выполнения.
В листинге 8.5 приведена функция, которая показывает, сколько пользовательского и системного времени потребил текущий процесс.
Листинг 8.5. (prinf-cpu-times.c) Определение пользовательского и системного времени, затраченного на выполнение текущего процесса
#include <stdio.h>
#include <sys/resource.h>
#include <sys/time.h>
#include <unistd.h>
void print_cpu_time() {
struct rusage usage;
getrusage(RUSAGE_SELF, &usage);
printf("CPU time: %ld.%061d sec user, %ld.%061d sec system ",
usage.ru_utime.tv_sec, usage.ru_utime.tv_usec,
usage.ru_stime.tv_sec, usage.ru_stime.tv_usec);
}