getrusage()

Получить информацию об использовании ресурсов

Прототип:

#include <sys/resource.h>
int getrusage( int who,
struct rusage *r_usage );

Аргументы:

who
Процесс, для которого требуется получить информацию об использовании:
RUSAGE_CHILDREN
получить информацию о ресурсах, используемых завершенными и ожидающими потомками текущего процесса. Если дочерний процесс никогда не ожидается (например, если у родителя установлен SA_NOCLDWAIT или для SIGCHLD установлено значение SIG_IGN), информация о ресурсах для дочернего процесса отбрасывается и не включается.
RUSAGE_SELF
получить информацию о ресурсах, используемых текущим процессом.
r_usage
Указатель на структуру struct rusage, в которой функция может хранить информацию о ресурсе.

Библиотека:

libc

Описание:

Функция getrusage() обеспечивает измерение ресурсов, используемых текущим процессом или его завершенными и ожидающими дочерними процессами, в зависимости от значения аргумента who.

Возвращаемое значение:

0
Успешное завершение.
-1
Возникла ошибка. Код ошибки записан в errno.

Коды ошибок:

EFAULT
Адрес, указанный аргументом r_usage, не находится в допустимой части адресного пространства процесса.
EINVAL
Некорректный параметр who.

Классификация:

POSIX 1003.1 XSI

Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Предостережения:

Поддерживаются только поля структуры struct timeval в структуре struct rusage.

Числа ru_inblock и ru_oublock учитывают только реальные операции ввода-вывода и в лучшем случае являются приблизительными показателями. Данные, предоставляемые механизмом кэширования, предоставляются только первому процессу для чтения и последнему процессу для записи данных.

Способ расчета размера резидентного набора является приблизительным и может искажать истинный размер резидентного набора.

Отказы страниц могут быть вызваны множеством причин. Обычной причиной отказа страницы является прямое обращение программы к странице, которой нет в памяти. Ядро может генерировать отказ страниц от имени пользователя, например, обслуживая функции read() и write(). Кроме того, отказ страницы может быть вызван отсутствием аппаратного преобразования на страницу, даже если страница находится в физической памяти.

В дополнение к аппаратным отказам страниц, ядро может вызывать псевдо-отказы страниц для выполнения некоторых служебных действий. Например, ядро может генерировать отказы страниц, даже если страницы существуют в физической памяти, чтобы заблокировать страницы, участвующие в необработанном запросе ввода-вывода.

По определению, аппаратные отказы страницы требуют физического ввода-вывода, а программные отказы страницы - нет. Например, восстановление страницы из списка свободных страниц позволит избежать ввода-вывода и вызвать программный отказ страницы. Чаще всего программные отказы страниц возникают во время запуска процесса как ссылки на страницы, которые уже находятся в памяти. Например, если в адресном пространстве происходит отказ в каком-то «горячем» исполняемом файле или в разделяемой библиотеке, возникает программный отказ страницы для адресного пространства. Кроме того, любой, кто выполняет read() или write() для чего-то, что находится в кэше страниц, также получает программный отказ страницы.

Невозможно получить информацию о дочернем процессе, который еще не завершен.

Тематические ссылки:

struct rusage, struct timeval, gettimeofday(), read(), times(), wait(), write()




Предыдущий раздел: Описание API системной библиотеки