[<<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 установлена