[<<Previous Entry]
[^^Up^^]
[Next Entry>>]
[Menu]
[About The Guide]
Ожидание изменения состояния подпроцесса
waitid(2) приостанавливает вызывающий процесс, пока один из его
подпроцессов не изменит состояние. Если такие изменения происходили до
вызова waitid(2), он возвращает управление немедленно. Параметры
idtype и id определяют, какие из подпроцессов должны обрабатываться:
idtype какие подпроцессы обрабатывать
P_PID подпроцесс с идентификатором, равным id
P_PGID подпроцесс с идентификатором группы
процессов, равным id
P_ALL любой подпроцесс; id игнорируется
Параметр infop содержит информацию о причине изменения состояния
подпроцесса. <wait.h> включает файл <sys/siginfo.h>, который содержит
описание структуры siginfo_t. Страница руководства SIGINFO(5)
описывает поля siginfo_t, относящиеся к waitid. Это:
int si_signo /* always equals SIGCLD for waitid */
int si_code /* contains a code identifying the cause of signal */
int si_status /* equals exit value or signal */
pid_t si_pid /* child process id */
Параметр options используется для задания того, какие изменения
состояния следует принимать во внимание. Он формируется побитовым ИЛИ
следующих значений:
WEXITED ожидать нормального завершения подпроцесса (по exit(2)).
WTRAPPED ожидать прерывания трассировки или точки останова в
отлаживаемом процессе (ptrace(2)).
WSTOPPED ожидать, пока подпроцесс будет остановлен получением
сигнала.
WCONTINUED ожидать, пока остановленный подпроцесс не начнет
исполнение.
WNOHANG немедленно возвращать управление, если нет немедленно
доступного слова состояния (ни один из подпроцессов не
менял свое состояние). Использование этого флага приводит к
"ожиданию" без блокировки. Это может быть использовано для
динамического наблюдения за изменением состояния
подпроцессов.
WNOWAIT сохранить подпроцесс в таком состоянии, что его слово
состояния может быть получено повторным вызовом wait. Этот
флаг означает неразрушающее использование waitid(2). Он
служит для опроса состояния подпроцесса без каких-либо
побочных эффектов. Такими эффектами могли бы быть: (1)
уничтожение группы процессов, если происходило ожидание
лидера группы процессов и (2) освобождение управляющего
терминала, если процесс является управляющим для этого
терминала. Например, этот флаг позволяет процессу опросить
состояние своего потомка, но не делает обычного wait(2),
так что группа процессов этого потомка по прежнему будет
существовать. Поэтому другие процессы по-прежнему могут
присоединяться к этой группе. Можно ждать завершения
подпроцессов с установкой этого флага, а затем, получив
слово состояния соответствующего подпроцесса, выполнить
требуемые действия и вызывать wait или waitid без флага
WNOWAIT.
Новое в SVR4: waitid(2)
ОЖИДАНИЕ ИЗМЕНЕНИЯ СОСТОЯНИЯ ПОДПРОЦЕССА
waitid(2)
ИМЯ
waitid - ожидание изменения состояния процесса
ИСПОЛЬЗОВАНИЕ
#include <sys/types.h>
#include <wait.h>
int waitid (idtype_t idtype, id_t id,
siginfo_t *infop, int options);
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
успех - 0
неуспех - -1 и errno установлена