Синопсис

# include < sys/wait/h >

pid_t wait (int *status);

pid_t waitpid (pid_t pid, int *status, int oрtions);

Функція waitpid () аналогічна функції wait () за виключенням того, що вона приймає додаткові параметри pid і oрtions. Параметр pid задає множину дочірніх процесів, для яких зчитується параметр завершення. Іншими словами, значення параметра pid визначає, які процеси попадуть в дану множину.

pid > 0 Один дочірній процес
pid = 0 Довільний дочірній процес, груповий ідентифікатор якого співпадає з ідентифікатором процесу, який викликає
pid < -1 Довільні дочірні процеси, груповий ідентифікатор яких рівний абсолютному значенню pid
pid = -1 Довільні дочірніпроцеси

Параметр oрtions визначає, як повинно відбуватися очікування процесу, і може приймати одне із значень наступних констант, визначених в оголошення < sys/wait/h >:

WCONTINUED Повертає статус завершення довільного дочірнього процесу (заданого параметром pid), про статус не було повідомлено з моменту його зупинки
WUNTRACED Повертає статус завершення довільного зупиненого дочірнього процесу (заданого параметром pid), про статус не було повідомлено з моменту його зупинки
WNOHANG Процес, який викликає, не призупиняється, якщо статус завершення дочірнього процесу недосяжний.

Ці константи можуть бути об’єднані за допомогою логічної операції АБО і передані в якості параметра oрtions (наприклад WCONTINUED ½½ WUNTRACED).

Обидві дані функції повертають ідентифікатор (PID) дочірнього проце­су, для якого отримано статус завершення. Якщо значення, які містяться в пара­метрі status, рівне числу 1, це значить, що дочірній процес завершився при нас­тупних умовах:

· процес повернув значення 0 з функції main ();

· процес викликав деяку версію функції exit () з аргументом 0;

· процес був завершений, оскільки завершився останній потік процесу.

В табл. 6 подано макроси, які дозволяють обчислити значення статусу завершення.

 

Таблиця 6. Макроси, які дозволяють обчислити значення статусу завершення
Макрос Опис
WIFEXITED Приводиться до нульового значення, якщо статус було повернено нормально завершеним дочірнім процесом
WEXITSTATUS Якщо значення WIFEXITED виявляється ненульовим, то оцінюються молодші 8 біт аргументу status, переданого завершеним дочірнім процесом функції _exit () або exit (), або значення, повернуте функцією main ()
WIFSIGNALED Приводиться до ненульового значення, якщо статус було повернено від дочірнього процесу, який завершився, оскі­льки йому було відправлено сигнал, але цей сигнал не було перехоплено
WTERMSIG Якщо значення WIFSIGNALED виявляється не нульовим, то оцінюється номер сигналу, який став причиною завер­ше­ння дочірнього процесу
WIFSTOPPED Приводиться до ненульового значення, якщо статус було повернено від дочірнього процесу, який в даний момент зупинено
WSTOPSIG Якщо значення WIFSTOPPED виявляється ненульовим, то оцінюється номер сигналу, який став причиною зупинки дочірнього процесу
WIFCONTINUED Приводиться до ненульового значення, якщо статус було повернуто від дочірнього процесу, який продовжив виконання після сигналу зупинки, прийнятого від блоку управління завданнями