Читать книгу 📗 "Linux программирование в примерах - Роббинс Арнольд"
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 описаны доступность различных полей
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_utimeru_stimeЭти два поля используют
struct timevalgettimeofday()В BSD 4.2 и 4.3 аргумент
statuswait()wait3()union waitintWIFEXITED()Таблица 9.3.
union wait| Макрос POSIX | Член объединения | Использование | Значение |
|---|---|---|---|
WIFEXITED() | w_termsig | w.w_termsig == 0 | True при нормальном завершении |
WEXITSTATUS() | w_retcode | code = w.w_retcode | Статус завершения, если не по сигналу |
WIFSIGNALED() | w_termsig | w.w_temsig != 0 | True, если завершен по сигналу |
WTERMSIG() | w_termsig | sig = w.w_termsig | Сигнал, вызвавший завершение |
WIFSTOPPED() | w_stopval | w.w_stopval == WSTOPPED | True, если остановлен |
WSTOPSIG() | w_stopsig | sig = w.w_stopsig | Сигнал, вызвавший остановку |
WCOREDUMP() | w_coredump | w.w_coredump != 0 | True, если потомок сделал снимок образа |
POSIX не стандартизует
union waitwait()waitpid()