waitpid()

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

Прототип:

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

Аргументы:

pid
Набор дочерних процессов, для которых необходимо получить информацию о статусе:
stat_loc
NULL или указатель на место, где функция может сохранить статус завершения дочернего процесса. Для ознакомления со справочными материалами о макросах, которые извлекают информацию из статуса, см. Макросы статуса.
options
Комбинация следующих флагов (или ни один из них):
WCONTINUED
вернуть статус для любого дочернего процесса, который был остановлен и продолжился.
WEXITED
ждать завершения процесса(ов).
WNOHANG
вернуть немедленно, если нет дочерних процессов для ожидания.
WNOWAIT
держать процесс в состоянии ожидания. Это не влияет на состояние процесса; процесс можно ждать снова после завершения вызова.
WSTOPPED
ждать и возвращать статус любого дочернего процесса, который остановился из-за полученного сигнала.
WUNTRACED
сообщать о статусе остановленного дочернего процесса.

Библиотека:

libc

Описание:

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

Функция waitpid() ведет себя так же, как и функция wait(), когда аргумент pid равен -1 и options равен нулю.

Только один из макросов WIFEXITED( stat_val ) и WIFSIGNALED( stat_val ) может возвращать ненулевое значение.

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

Если функция waitpid() отработала успешно, она возвращает ID завершенного дочернего процесса. Если функция waitpid() вызвана с WNOHANG в options и есть хотя бы один дочерний процесс указанный в pid, для которого статус недоступен, функция возвращает нулевое значение. При появлении сигнала функция возвращает -1, а переменной errno присваивается значение EINTR.

Коды ошибок:

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

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

POSIX 1003.1

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

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

spawn(), wait(), wait3(), wait4(), waitid()




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