Provided by:
manpages-ru_0.98-4_all 
ИМЯ
wait3, wait4 - ожидать окончания процесса, стиль BSD
ОБЗОР
#include <sys/types.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <sys/wait.h>
pid_t wait3(int *status, int options,
struct rusage *rusage);
pid_t wait4(pid_t pid, int *status, int options,
struct rusage *rusage);
ОПИСАНИЕ
Функция wait3 приостанавливает выполнение текущего процесса, пока его
потомок не завершится или пока не будет получен сигнал для завершения
текущего процесса или вызова функции-обработчика этого сигнала. Если
потомок уже завершился к моменту вызова этой функции (так называемый
"zombie" (зомби) процесс), то возврат из функции происходит мнгновенно.
Все системные ресурсы, которые использовал потомок - освобождаются.
Функция wait4 приостанавливает выполнение текущего процесса, пока его
потомок, заданный аргументом pid не завершится или пока пока не будет
получен сигнал для завершения текущего процесса или вызова
функции-обработчика этого сигнала. Если потомок, заданный аргументом
pid уже завершился к моменту вызова этой функции (так называемый
"zombie" (зомби) процесс), то возврат из функции происходит мнгновенно.
Все системные ресурсы, которые использовал потомок - освобождаются.
Значение pid может быть:
< -1 что означает необходимость ожидать окончания всех
процессов-потомков, чей идентификатор группы процесса равен по
модулю значению pid.
-1 что означает необходимость ожидать окончания всех
процессов-потомков; это эквивалентно вызову wait3.
0 что означает необходимость ожидать окончания всех
процессов-потомков, чей идентификатор группы процесса равен
соответствующему идетификатору вызывающего процесса.
> 0 что означает необходимость ожидать окончания процесса-потомка,
чей идентификатор процесса равен значению pid.
Значение options является битовой маской, которая получается битовым
сложением (OR) следующих констант:
WNOHANG
означет немедленный возврат, если нет потомков, для которых
нужно ожидать завершения.
WUNTRACED
означает также возврат для потомков которые остановлены и чьё
состояние не поддаётся определению.
Если status не NULL, wait3 или wait4 сохраняют информацию о состоянии в
месте, на которое указывает status.
Это состояние может быть оценено следующими макросами (эти макросы
получают буфер состояния (in) как аргумент --, но не указатель на
буфер!):
WIFEXITED(status)
не ноль, если потомок нормально завершился.
WEXITSTATUS(status)
оценивает наименее значимые восемь бит кода возврата
завершившегося процесса-потомка, который может быть задан как
аргумент для вызова exit() или как аргумент для оператора return
в основной программе. Данный макрос можно применять только,
если WIFEXITED вернул не ноль.
WIFSIGNALED(status)
возврашает true, если процесс-потомок завершился потому что
получил сигнал, который не смог обработать.
WTERMSIG(status)
возвращает номер сигнала, который привёл к завершению
процесса-потомка. Данный макрос можно применять только если
WIFSIGNALED возвратил не ноль.
WIFSTOPPED(status)
возвращает true, если процесс-потомок, который вернул
управление, в настоящий момент остановлен; такое возможно только
если данный вызов был выполнен, используя WUNTRACED.
WSTOPSIG(status)
возвращает номер сигнала, по которому процесс-потомок был
остановлен. Данный макрос можно применять только если
WIFSTOPPED вернул не ноль.
Если rusage не NULL, то структура struct rusage которая описывается в
<sys/resource.h> будет заполнена учётной информацией. Подробности
смотрите в getrusage(2).
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Возвращается идентификатор завершившегося процесса-потомка, -1 в случае
ошибки (особенно, когда не существует процессов-потомков, для которых
нужно ожидать завершения) или возвращается ноль, если был использован
WNOHANG , но пока нет доступного процесса-потомка. В последних двух
случаях errno устанавливается соответствующим образом.
ОШИБКИ
ECHILD Указанный процесс-потомок, для которого осуществляется ожидание
завершения, не существует.
EINTR Если WNOHANG не был установлен и был перехвачен какой-либо
неблокирующий сигнал или SIGCHLD .
EINVAL Для wait4 было задано неправильное значение для options .
ЗАМЕЧАНИЯ
Подключение <sys/time.h> в данный момент не требуется, но увеличивает
переносимость на другие платформы. (Действительно, <sys/resource.h>
звдаёт структуру rusage с полями типа struct timeval , описанными в
<sys/time.h>.)
Прототипы для этих функций доступны только если задан флаг _BSD_SOURCE
(или явно или неявно, если не задан _POSIX_SOURCE или компиляция
осуществляется с опцией -ansi).
СООТВЕТСТВИЕ СТАНДАРТАМ
SVr4, POSIX.1
СМОТРИ ТАКЖЕ
signal(2), getrusage(2), wait(2), signal(7)
ПЕРЕВОД
Перевёл с английского Виктор Вислобоков <corochoone@perm.ru> 2004