название
wait, waitpid – дождаться завершения процесса
конспект
#include
#include
pid_t wait (int * статус );
pid_t waitpid (pid_t pid , int * статус , int параметры );
Описание
Функция wait приостанавливает выполнение текущего процесса до тех пор, пока не завершится дочерний процесс или пока не будет доставлен сигнал, действие которого заключается в прекращении текущего процесса или вызове функции обработки сигнала. Если ребенок уже вышел к моменту вызова (так называемый процесс “зомби”), функция немедленно возвращается. Любые системные ресурсы, используемые ребенком, освобождаются.
Функция waitpid приостанавливает выполнение текущего процесса до тех пор, пока не завершится дочерний процесс, указанный в аргументе pid , или пока не будет доставлен сигнал, действие которого заключается в прекращении текущего процесса или вызвать функцию обработки сигналов. Если дочерний элемент, запрошенный pid , уже завершился к моменту вызова (так называемый процесс «зомби»), функция немедленно возвращается. Любые системные ресурсы, используемые ребенком, освобождаются.
Значение pid может быть одним из:
<-1
что означает ожидание любого дочернего процесса, чей идентификатор группы процессов равен абсолютному значению pid .
-1
что означает ждать любого дочернего процесса; это то же поведение, которое проявляет wait .
что означает ожидание любого дочернего процесса, чей идентификатор группы процессов равен идентификатору вызывающего процесса.
> 0
что означает ожидание дочернего элемента, чей идентификатор процесса равен значению pid .
Значение options – это OR, равное нулю или более из следующих констант:
WNOHANG
что означает немедленное возвращение, если ни один ребенок не вышел.
WUNTRACED
что означает также возвращаться для детей, которые остановлены и чей статус не сообщается.
(Варианты только для Linux см. Ниже.)
Если status не равно NULL , wait или waitpid хранят информацию о состоянии в месте, указанном status .
Это состояние может быть оценено с помощью следующих макросов (эти макросы принимают в качестве аргумента буфер статистики ( int ), а не указатель на буфер!):
WIFEXITED ( Состояние )
не равен нулю, если ребенок вышел нормально.
WEXITSTATUS ( Состояние )
оценивает до наименее значимых восьми бит кода возврата завершившегося дочернего элемента, который мог быть установлен в качестве аргумента вызова exit () или в качестве аргумента для возврата Заявление в основной программе. Этот макрос может быть оценен только в том случае, если WIFEXITED вернул ненулевое значение.
WIFSIGNALED ( Состояние )
возвращает true, если дочерний процесс завершился из-за сигнала, который не был перехвачен.
WTERMSIG ( Состояние )
возвращает номер сигнала, вызвавшего завершение дочернего процесса. Этот макрос может быть оценен только если WIFSIGNALED вернул ненулевое значение.
WIFSTOPPED ( Состояние )
возвращает true, если дочерний процесс, вызвавший возврат, в данный момент остановлен; это возможно только в том случае, если вызов был выполнен с использованием WUNTRACED .
WSTOPSIG ( Состояние )
возвращает номер сигнала, который заставил ребенка остановиться. Этот макрос может быть оценен только в том случае, если WIFSTOPPED вернул ненулевое значение.
Некоторые версии Unix (например, Linux, Solaris, но не AIX, SunOS) также определяют макрос WCOREDUMP ( status ) , чтобы проверить, является ли дочерний элемент процесс сбрасывает ядро. Используйте только это в #ifdef WCOREDUMP … #endif.
Возвращаемое значение
Идентификатор дочернего процесса, который завершился, или ноль, если WNOHANG использовался и дочерний элемент недоступен, или -1 при ошибке (в этом случае для errno установлено соответствующее значение). значение).
ошибки
ECHILD
если процесс, указанный в pid , не существует или не является дочерним по отношению к вызывающему процессу. (Это может произойти для собственного потомка, если для SIGCHLD установлено значение SIG_IGN. См. Также раздел LINUX NOTES о потоках.)
EINVAL
если аргумент options недействителен.
EINTR
если WNOHANG не был установлен и был обнаружен разблокированный сигнал или SIGCHLD .