Linux программирование в примерах
Шрифт:
Чисто BSD системы (4.3 Reno и более поздние) поддерживают все поля. В табл. 9.2 описаны доступность различных полей
Таблица 9.2. Доступность полей
Поле | 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 |
Стандартом
Наиболее интересными полями являются
92
Дважды проверьте справочную страницу getrusage(2), если у вас более новое ядро, поскольку это поведение, возможно, изменилось — Примеч. автора.
Эти два поля используют
В BSD 4.2 и 4.3 аргумент
Таблица 9.3.
Макрос 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 не стандартизует
9.2. Группы процессов
Группа процесса является группой связанных процессов, которые в целях управления заданием (job) рассматриваются вместе. Процессы с одним и тем же ID группы процессов являются членами группы процессов, а процесс, PID которого равен ID группы процессов, является лидеров группы процессов. Новые процессы наследуют ID группы процессов своих родительских процессов.
Мы уже видели, что
9.2.1. Обзор управления заданиями
Управление заданиями является сложной темой, той, в которую мы решили не погружаться в данной книге. Однако, здесь приведен краткий концептуальной обзор.
Устройство терминала (физическое или другое) с работающим на нем пользователем называется управляющим терминалом.
Сеанс (session) является коллекцией групп процессов, связанных с управляющим терминалом. На одном терминале имеется лишь один сеанс, с несколькими группами процессов в сеансе. Один процесс назначен лидером сеанса; обычно это оболочка, такая, как Bash,
93
Каждое задание, запущенное управляющей заданиями оболочкой, будь то простая программа или конвейер, получает отдельный идентификатор группы процессов. Таким способом оболочка может манипулировать заданием как отдельной сущностью, хотя в нем может быть несколько процессов.
Управляющий терминал также имеет связанный с ним идентификатор группы процессов. Когда пользователь набирает специальный символ, такой, как CTRL-C для «прерывания» или CTRL-Z для «остановки», ядро посылает данный сигнал процессам в группе процессов терминала.
Группе процессов, ID которой совпадает с ID управляющего терминала, разрешено записывать в терминал и читать с него. Эта группа называется приоритетной (foreground) группой процессов. (Она получает также генерируемые клавиатурой сигналы.) Любые другие группы процессов в сеансе являются фоновыми (background) группами процессов и не могут читать или записывать в терминал; они получают специальные сигналы, которые их останавливают, если они пытаются это делать.