Главная » 2017 » Ноябрь » 19 » man 2 getrusage
22:28
man 2 getrusage

SEO sprint - Всё для максимальной раскрутки!





ИМЯ


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_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
устанавливается в соответствующее значение.



ОШИБКИ


EFAULT usage указывает за пределы доступного адресного пространства.

└────────────┴──────────────────────┴──────────┘



СООТВЕТСТВИЕ СТАНДАРТАМ


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)



Категория: (2) Системные вызовы ядра (функции языка Си) | Просмотров: 389 | Добавил: Администратор | Рейтинг: 0.0/0
Всего комментариев: 0
avatar