Получить информацию об использовании ресурсов
#include <sys/resource.h>int getrusage( int who,struct rusage *r_usage );
SA_NOCLDWAIT
или для SIGCHLD
установлено значение SIG_IGN
), информация о ресурсах для дочернего процесса отбрасывается и не включается. libc
Функция getrusage() обеспечивает измерение ресурсов, используемых текущим процессом или его завершенными и ожидающими дочерними процессами, в зависимости от значения аргумента who.
POSIX 1003.1 X/Open Systems Interfaces Extension
Поддерживаются только поля структуры struct timeval в структуре struct rusage.
Числа ru_inblock и ru_oublock учитывают только реальные операции ввода-вывода и в лучшем случае являются приблизительными показателями. Данные, предоставляемые механизмом кэширования, предоставляются только первому процессу для чтения и последнему процессу для записи данных.
Способ расчета размера резидентного набора является приблизительным и может искажать истинный размер резидентного набора.
Отказы страниц могут быть вызваны множеством причин. Обычной причиной отказа страницы является прямое обращение программы к странице, которой нет в памяти. Ядро может генерировать отказ страниц от имени пользователя, например, обслуживая функции read() и write(). Кроме того, отказ страницы может быть вызван отсутствием аппаратного преобразования на страницу, даже если страница находится в физической памяти.
В дополнение к аппаратным отказам страниц, ядро может вызывать псевдо-отказы страниц для выполнения некоторых служебных действий. Например, ядро может генерировать отказы страниц, даже если страницы существуют в физической памяти, чтобы заблокировать страницы, участвующие в необработанном запросе ввода-вывода.
По определению, аппаратные отказы страницы требуют физического ввода-вывода, а программные отказы страницы - нет. Например, восстановление страницы из списка свободных страниц позволит избежать ввода-вывода и вызвать программный отказ страницы. Чаще всего программные отказы страниц возникают во время запуска процесса как ссылки на страницы, которые уже находятся в памяти. Например, если в адресном пространстве происходит отказ в каком-то «горячем» исполняемом файле или в разделяемой библиотеке, возникает программный отказ страницы для адресного пространства. Кроме того, любой, кто выполняет read() или write() для чего-то, что находится в кэше страниц, также получает программный отказ страницы.
Невозможно получить информацию о дочернем процессе, который еще не завершен.
struct rusage, struct timeval, gettimeofday(), read(), times(), wait(), write()
Предыдущий раздел: Описание API системной библиотеки