GETRUSAGE(2) | Руководство программиста Linux | GETRUSAGE(2) |
getrusage - считывает использованные ресурсы
#include <sys/time.h> #include <sys/resource.h>
int getrusage(int who, struct rusage *usage);
getrusage() возвращает текущие ограничения на ресурсы для значения who, которое может быть:
Данные по использованным ресурсам возвращаются в структуре, на которую указывает usage; она имеет следующий вид:
struct rusage { struct timeval ru_utime; /* время ЦП, исполь. в режиме пользователя */ struct timeval ru_stime; /* время ЦП, исполь. в режиме системы */ long ru_maxrss; /* максимальный rss */ long ru_ixrss; /* полный объём общей памяти */ long ru_idrss; /* полный объём собственной памяти */ long ru_isrss; /* полный объём собственного стека */ long ru_minflt; /* количество восстановленных страниц (мягких отказов) */ long ru_majflt; /* количество отказавших страниц (жёстких отказов) */ long ru_nswap; /* количество обращений при подкачке */ long ru_inblock; /* количество операций блокового ввода */ long ru_oublock; /* количество операций блокового вывода */ long ru_msgsnd; /* количество посланных сообщений IPC */ long ru_msgrcv; /* количество принятых сообщений IPC */ long ru_nsignals; /* количество принятых сигналов */ long ru_nvcsw; /* количество переключений контекста */ long ru_nivcsw; /* кол-во принудительных переключений контекста */ };
Не все поля заполняются; несопровождаемые поля устанавливаются ядром в ноль. (Несопровождаемые поля предоставляются для совместимости с другими системами, и когда-нибудь станут поддерживаться в Linux.) Поля следует понимать так:
При успешном выполнении возвращается 0. В случае ошибки возвращается -1, а errno устанавливается в соответствующее значение.
Описание терминов данного раздела смотрите в attributes(7).
Интерфейс | Атрибут | Значение |
getrusage() | Безвредность в нитях | MT-Safe |
POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD. В POSIX.1 определён вызов getrusage(), но указаны только поля ru_utime и ru_stime.
RUSAGE_THREAD есть только в Linux.
Значения использованных ресурсов сохраняются при execve(2).
Включать <sys/time.h> в настоящее время не требуется, но это увеличивает переносимость. (Хотя struct timeval определена в <sys/time.h>.)
В ядрах Linux до версии 2.6.9, если значение SIGCHLD равно SIG_IGN, то использованные ресурсы потомков процессов автоматически включаются в значение, возвращаемое RUSAGE_CHILDREN, хотя в POSIX.1-2001 это явно запрещено. Это несоответствие исправлено в Linux 2.6.9 и более новых версиях.
Определение структуры, показанное в начале страницы, взято из 4.3BSD Reno.
В старых системах была функция vtimes() с подобным getrusage() назначением. Для обратной совместимости в glibc также есть функция vtimes(). Во всех новых приложениях должен быть использован getrusage().
Смотрите также описание /proc/[pid]/stat в proc(5).
clock_gettime(2), getrlimit(2), times(2), wait(2), wait4(2), clock(3)
2017-09-15 | Linux |