WAIT(1) WAIT(1)
НАЗВАНИЕ
wait - ожидание завершения процесса
СИНТАКСИС
wait [идентификатор_процесса]
ОПИСАНИЕ
Команда wait ждет завершения фонового процесса (то есть
процесса, запущенного посредством &) с заданным иденти-
фикатором и возвращает код его завершения. Если иденти-
фикатор_процесса не указан, ожидается завершение всех
активных в настоящий момент фоновых процессов; возвра-
щаемый код при этом получается нулевым.
Shell сам выполняет команду wait, без создания нового
процесса.
СМ. ТАКЖЕ
sh(1).
ОГРАНИЧЕНИЯ
Если Вы получили сообщение о чрезмерном числе процессов
(cannot fork, too many processes), с помощью команды
wait(1) дождитесь завершения фоновых процессов. Если
улучшение не наступило, вероятно, переполнилась систем-
ная таблица процессов или у Вас слишком много активных
приоритетных процессов. (Имеется ограничение на число
процессов, ассоциированных с каждым пользователем, и на
общее число процессов.)
СЮРПРИЗЫ
Не все процессы, входящие в конвейер из трех или более
фаз, являются сыновьями shell'а, поэтому их завершения
нельзя ждать с помощью команды wait.
Если заданный идентификатор не относится к активному
процессу, ожидается завершение всех активных в настоя-
щий момент фоновых процессов; возвращаемый код при этом
получается нулевым.
WAIT(2) WAIT(2)
НАЗВАНИЕ
wait - ожидание завершения порожденного процесса
СИНТАКСИС
int wait (stat_loc)
int *stat_loc;
ОПИСАНИЕ
В результате выполнения системного вызова wait процесс
приостанавливается до тех пор, пока один из непосредст-
венно порожденных им процессов не завершится, или пока
порожденный процесс, который находится в режиме трасси-
ровки, не остановится при достижении точки прерывания.
Преждевременный выход из системного вызова wait проис-
ходит, если был получен сигнал; если же порожденный
процесс остановился или завершился раньше вызова wait,
то возврат происходит немедленно.
Если аргумент stat_loc не равен 0, то 16 бит информа-
ции, называемые статусом, помещаются в младшие 16 бит
слова, на которое указывает stat_loc. С помощью статуса
можно узнать, приостановлено или завершено выполнение
порожденного процесса. Если порожденный процесс завер-
шился, то статус указывает причину завершения. Статус
трактуется следующим образом:
1. Если порожденный процесс приостановлен, старшие 8
бит статуса содержат номер сигнала, ставшего при-
чиной приостановки, а младшие 8 бит устанавливают-
ся равными 0177.
2. Если порожденный процесс завершился посредством
системного вызова exit, то младшие 8 бит статуса
будут равны 0, а старшие 8 бит будут содержать
младшие 8 бит аргумента, который порожденный про-
цесс передает системному вызову exit [см.
exit(2)].
3. Если порожденный процесс завершился из-за получе-
ния сигнала, то старшие 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 присваивается код ошибки.
|