Команда Linux – подождите

название

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 .

Оцените статью
Solutics.ru
Добавить комментарий