WAIT(2)
НАЗВАНИЕ
wait - ожидание завершения порожденного процесса
СИНТАКСИС
int wait (stat_loc)
int *stat_loc;
ОПИСАНИЕ
В результате выполнения системного вызова wait процесс
приостанавливается до тех пор, пока один из непосредственно порожденных им процессов не завершится, или пока
порожденный процесс, который находится в режиме трассировки, не остановится при достижении точки прерывания.
Преждевременный выход из системного вызова wait происходит, если был получен сигнал; если же порожденный
процесс остановился или завершился раньше вызова wait,
то возврат происходит немедленно.
Если аргумент stat_loc не равен 0, то 16 бит информации, называемые статусом, помещаются в младшие 16 бит
слова, на которое указывает stat_loc. С помощью статуса
можно узнать, приостановлено или завершено выполнение
порожденного процесса. Если порожденный процесс завершился, то статус указывает причину завершения. Статус
трактуется следующим образом:
- Если порожденный процесс приостановлен, старшие 8
бит статуса содержат номер сигнала, ставшего причиной приостановки, а младшие 8 бит устанавливаются равными 0177.
- Если порожденный процесс завершился посредством
системного вызова exit, то младшие 8 бит статуса
будут равны 0, а старшие 8 бит будут содержать
младшие 8 бит аргумента, который порожденный процесс передает системному вызову exit [см.
exit(2)].
- Если порожденный процесс завершился из-за получения сигнала, то старшие 8 бит статуса будут равны
0, а младшие 8 бит будут содержать номер сигнала,
вызвавшего завершение процесса. Кроме того, если
младший седьмой бит (бит 0200) равен 1, будет произведен дамп оперативной памяти [см. signal(2)].
Если родительский процесс завершается без ожидания завершения порожденных процессов, то для последних идентификатор родительского процесса становится равным 1.
Это означает, что процесс инициализации наследует порожденные процессы [см. intro(2)].
Системный вызов wait завершается неудачей и происходит
немедленный возврат, если выполнено следующее условие:
- [ECHILD]
- Вызывающий процесс не имеет существующих
порожденных процессов, завершения которых
не ждут.
СМ. ТАКЖЕ
exec(2), exit(2), fork(2), intro(2), pause(2),
ptrace(2), signal(2).
ПРЕДОСТЕРЕЖЕНИЯ
Системный вызов wait завершается неудачей и его действия не определены, если аргумент stat_loc указывает за
пределы отведенного процессу адресного пространства.
См. также ПРЕДОСТЕРЕЖЕНИЯ в signal(2).
ДИАГНОСТИКА
Если выполнение системного вызова wait завершилось
вследствие получения сигнала, то результат будет равен
-1, а переменной errno будет присвоено значение EINTR
(прерывание системного вызова). Если wait завершился
из-за приостановки или завершения порожденного процесса, то результатом служит идентификатор порожденного
процесса. В противном случае возвращается -1, а переменной errno присваивается код ошибки.