Linux программирование в примерах
Часть 121 из 253 Информация о книге
struct rusage {struct timeval ru_utime; /* используемое время пользователя */struct timeval ru_stime; /* используемое системное время */long ru_maxrss; /* максимальный размер резидентного набора */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; /* посланных сообщений */long ru_msgrcv; /* полученных сообщений */long ru_nsignals; /* полученных сигналов */long ru_nvcsw; /* добровольных переключений контекста */long ru_nivcsw; /* принудительных переключений контекста */};Чисто BSD системы (4.3 Reno и более поздние) поддерживают все поля. В табл. 9.2 описаны доступность различных полей
для POSIX и Linux.struct rusageТаблица 9.2. Доступность полей
struct rusage
Поле POSIX Linux Поле POSIX Linux ru_utime√ ≥ 2.4 ru_nswap≥2.4 ru_stime√ ≥2.4 ru_nvcsw≥2.6 ru_minflt≥2.4 ru_nivcsw≥2.6 ru_majflt≥2.4 Стандартом определены лишь поля, помеченные «POSIX». Хотя Linux определяет полную структуру, ядро 2.4 поддерживает лишь поля времени пользователя и системного времени. Ядро 2.6 поддерживает также поля, связанные с переключением контекста. [92]
Наиболее интересными полями являются
иru_utime, использование времени процессора в режиме пользователя и ядра соответственно. (Время процессора в режиме пользователя является временем, потраченным на исполнение кода уровня пользователя. Время процессора в режиме ядра является временем, потраченным в ядре в пользу процесса.)ru_stimeЭти два поля используют
, которая содержит значения времени с точностью до микросекунд. Дополнительные сведения по этой структуре см. в разделе 14.3.1 «Время в микросекундах:struct timeval».gettimeofday()В BSD 4.2 и 4.3 аргумент
функцийstatusиwait()былwait3(). Он умещался вunion waitи предоставлял доступ к тем же сведениям, которые выдают современные макросыintи др., но через членов объединения. Не все члены были действительными во всех случаях. Эти члены и их использование описаны в табл. 9.3.WIFEXITED()Таблица 9.3.
4.2 и 4.3 BSDunion wait
Макрос POSIX Член объединения Использование Значение WIFEXITED()w_termsigw.w_termsig == 0True при нормальном завершении WEXITSTATUS()w_retcodecode = w.w_retcodeСтатус завершения, если не по сигналу WIFSIGNALED()w_termsigw.w_temsig != 0True, если завершен по сигналу WTERMSIG()w_termsigsig = w.w_termsigСигнал, вызвавший завершение WIFSTOPPED()w_stopvalw.w_stopval == WSTOPPEDTrue, если остановлен WSTOPSIG()w_stopsigsig = w.w_stopsigСигнал, вызвавший остановку WCOREDUMP()w_coredumpw.w_coredump != 0True, если потомок сделал снимок образа POSIX не стандартизует
, a BSD 4.4 не документирует его, используя вместо этого макросы POSIX. GLIBC делает несколько бросков, чтобы заставить использующий его старый код продолжать работать. Мы опишем его здесь главным образом для того, чтобы вы увидев его — узнали; новый код должен использовать макросы, описанные в разделе 9.1.6.1 «Использование функций POSIX:union waitиwait()».waitpid()