[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Ожидание порожденного процесса

Процесс может синхронизоваться с завершением порожденного процесса с
помощью системного вызова wait(2).
Если вызывается wait(2), а у процесса нет ни одного незавершенного
подпроцесса, он немедленно возвращает -1 и устанавливает errno равной
ECHILD. Иначе вызывающий процесс:
   1. засыпает, если существует незавершившийся подпроцесс.

   2. возвращает управление  немедленно, если  существует  подпроцесс,
      который уже завершился, но к нему не применялся wait(2).

      В  обоих   вышеперечисленных  случаях,   возвращенное   значение
      является идентификатором завершившегося подпроцесса. Кроме того,
      код завершения подпроцесса сохраняется в параметре wait(2).

      Подпроцесс может  завершиться добровольно (вызовом exit), или он
      может быть  убит получением  необрабатываемого сигнала.  Эти два
      варианта можно  различить анализом  содержимого младших  16  бит
      слова состояния,  которое формирует  wait(2), в  зависимости  от
      того, какой из байтов содержит ноль. На машинах, где целое число
      занимает четыре байта, значение двух старших байт не определено.
      wstat(5)   определяет    макросы,   используемые   для   анализа
      содержимого слова состояния. Это будет обсуждаться вкратце.

   3. возвращает значение  -1 и  устанавливает  errno  в  EINTR,  если
      wait(2) был  прерван сигналом.  Если это  произошло,  а  вы  по-
      прежнему хотите  дождаться завершения подпроцесса, вы должны еще
      раз вызвать wait(2).

Параметр wait(2) - указатель на целое число. Если вас не интересует
код завершения подпроцесса, вы можете использовать нулевой указатель.
Если процесс ожидает завершения нескольких подпроцессов, то порядок, в
котором они завершатся, неизвестен. Поэтому ваша программа не должна
зависеть от предполагаемого порядка завершения подпроцессов. Если
родительский процесс не задал флаг SA_NOCLDWAIT в вызове sigaction(2),
подпроцесс в промежутке между завершением и вызовом из wait(2) из
родительского процесса будет находиться в состоянии зомби. Зомби - это
процесс, у которого есть только процесс-структура в списке активных
процессов. Эта структура будет освобождена только тогда, когда
родительский процесс исполнит wait(2). Если настоящий родитель
завершается, не вызвав wait(2), приемный родитель init периодически
вызывает wait(2).
                    ОЖИДАНИЕ ПОРОЖДЕННОГО ПРОЦЕССА
wait(2)

ИМЯ

      wait - ожидание остановки или завершения порожденного процесса

ИСПОЛЬЗОВАНИЕ

      #include <sys/types.h>
      #include <wait.h>

      pid_t wait(int *stal_loc);

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

      успех - идентификатор завершившегося подпроцесса

      неуспех - -1 и errno установлена