- bullseye-backports 4.18.1-1~bpo11+1
- testing 4.18.1-1
- unstable 4.18.1-1
GETRUSAGE(2) | Руководство программиста Linux | GETRUSAGE(2) |
ИМЯ¶
getrusage - считывает использованные ресурсы
СИНТАКСИС¶
#include <sys/time.h>
#include <sys/resource.h>
int getrusage(int who, struct rusage *usage);
ОПИСАНИЕ¶
getrusage() возвращает текущие ограничения на ресурсы для значения who, которое может быть:
- RUSAGE_SELF
- Возвращает статистику по использованию ресурсов вызывающим процессом (суммируются значения всех нитей процесса).
- RUSAGE_CHILDREN
- Возвращает статистику по использованию ресурсов всех потомков вызывающего процесса, которые завершились или завершение которых ожидается. Эта статистика включает в себя ресурсы, использованные внучками и дальнейшими потомками, если все промежуточные потомки завершились или их завершение ожидается.
- RUSAGE_THREAD (начиная с Linux 2.6.26)
- Возвращает статистику по использованию ресурсов вызывающей нити. Чтобы получить определение этой константы из <sys/resource.h> должен быть определён макрос тестирования свойств _GNU_SOURCE (до включения всех заголовочных файлов).
Данные по использованным ресурсам возвращаются в структуре, на которую указывает 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.) Поля следует понимать так:
- ru_utime
- Общее количество времени, проведённое в режиме пользователя, выражается структурой timeval (секунды и микросекунды).
- ru_stime
- Общее количество времени, проведённое в режиме ядра, выражается структурой timeval (секунды и микросекунды).
- ru_maxrss (начиная с Linux 2.6.32)
- Максимальный используемый размер постоянно занимаемый в памяти (в килобайтах). Для RUSAGE_CHILDREN определяется наибольший размер постоянной памяти среди потомков, а не максимальный размер постоянной памяти всего дерева процесса.
- ru_ixrss (не ведётся)
- В настоящее время в Linux не учитывается.
- ru_idrss (не ведётся)
- В настоящее время в Linux не учитывается.
- ru_isrss (не ведётся)
- В настоящее время в Linux не учитывается.
- ru_minflt
- Количество сбойных страниц, обслуженных без операций ввода-вывода; в данном случае страницы «восстановлены» из списка страниц, ожидающих перемещения.
- ru_majflt
- Количество сбойных страниц, обслуженных с помощью операций ввода-вывода.
- ru_nswap (не ведётся)
- В настоящее время в Linux не учитывается.
- ru_inblock (начиная с Linux 2.6.22)
- Количество обращений на чтение из файловой системы.
- ru_oublock (начиная с Linux 2.6.22)
- Количество обращений на запись в файловую систему.
- ru_msgsnd (не ведётся)
- В настоящее время в Linux не учитывается.
- ru_msgrcv (не ведётся)
- В настоящее время в Linux не учитывается.
- ru_nsignals (не ведётся)
- В настоящее время в Linux не учитывается.
- ru_nvcsw (начиная с Linux 2.6)
- Количество переключений контекста в следствии добровольной отдачи процессом процессора до того, как истёк его рабочий временной интервал (обычно, из-за ожидания доступности ресурса).
- ru_nivcsw (начиная с Linux 2.6)
- Количество переключений контекста в следствии вытеснения процессом с более высоким приоритетом или из-за истечения рабочего временного интервала процесса.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ¶
При успешном выполнении возвращается 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.
Ancient systems provided a vtimes() function with a similar purpose to getrusage(). For backward compatibility, glibc (up until version 2.32) also provides vtimes(). All new applications should be written using getrusage().
Смотрите также описание /proc/[pid]/stat в proc(5).
СМ. ТАКЖЕ¶
clock_gettime(2), getrlimit(2), times(2), wait(2), wait4(2), clock(3)
ЗАМЕЧАНИЯ¶
Эта страница является частью проекта Linux man-pages версии 5.10. Описание проекта, информацию об ошибках и последнюю версию этой страницы можно найти по адресу https://www.kernel.org/doc/man-pages/.
ПЕРЕВОД¶
Русский перевод этой страницы руководства был сделан Azamat Hackimov <azamat.hackimov@gmail.com>, Dmitry Bolkhovskikh <d20052005@yandex.ru>, Vladislav <ivladislavefimov@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>
Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.
Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.
21 декабря 2020 г. | Linux |