ИМЯ¶
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