wait()

Ожидать статуса завершенного дочернего процесса

Прототип:

#include <sys/types.h>
#include <sys/wait.h>
pid_t wait( int *stat_loc );

Аргументы:

stat_loc
NULL или указатель на место, где функция может сохранить статус завершения дочернего процесса.

Библиотека:

libc

Описание:

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

Макросы статуса

Если указатель stat_loc не NULL, в указанном месте сохраняется статус, с которым завершился дочерний процесс. Макросы ниже, определенные в <sys/wait.h>, извлекают информацию из stat_loc. Аргументом в макросах является целочисленное значение, на которое указывает stat_loc.

POSIX определяет следующие макросы:

WEXITSTATUS( stat_val )
Возвращает младшие 8 бит статуса завершения дочернего процесса, если значение WIFEXITED( stat_val ) не равно нулю.
WIFCONTINUED( stat_val )
Возвращает ненулевое значение, если статус получен от дочернего процесса, который продолжился после остановки.
WIFEXITED( stat_val )
Возвращает ненулевое значение, если статус получен от дочернего процесса, который нормально завершил работу.
WIFSIGNALED( stat_val )
Возвращает ненулевое значение, если статус получен от дочернего процесса, который завершил работу из-за приема сигнала, который не был обработан.
WIFSTOPPED( stat_val )
Возвращает ненулевое значение, если статус получен от дочернего процесса, который был остановлен.
WSTOPSIG( stat_val )
Возвращает номер сигнала, который вызвал остановку дочернего процесса, если значение WIFSTOPPED( stat_val ) не равно нулю.
WTERMSIG( stat_val )
Возвращает номер сигнала, который вызвал завершение дочернего процесса, если значение WIFSTOPPED( stat_val ) не равно нулю.

Макросы, не являющиеся частью стандарта POSIX:

WCOREDUMP( stat_val )
Возвращает ненулевое значение, если дочерний процесс завершился с созданием дампа ядра.

Один из макросов WIFEXITED( *stat_loc ) и WIFSIGNALED( *stat_loc ) возвращает ненулевое значение.

Функция waitid() дает больше информации о статусе, чем макросы (не является частью станадарта POSIX).

Возвращаемое значение:

Идентификатор дочернего процесса. Если возникла ошибка функция возвращает -1, код ошибки записывается в errno.

Коды ошибок:

ECHILD
Процесс не имеет ожидаемых дочерних процессов.
EINTR
Функция была прервана сигналом. Значение по указателю stat_loc не определено.

Классификация:

POSIX 1003.1

Безопасность использования
Точка остановки потока
Да
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

errno, spawn(), wait4(), waitid(), waitpid()




Предыдущий раздел: Описание API системной библиотеки