Подождите — Команда Linux — Команда Unix

wait, waitpid — дождаться завершения процесса

конспект

#включают
#включают

pid_t wait (int *статус);
pid_t waitpid (pid_t ПИД-регулятор, int *статус, ИНТ параметры);

Описание

 Подождите функция приостанавливает выполнение текущего процесса до тех пор, пока не завершится дочерний процесс или пока не будет доставлен сигнал, действие которого заключается в прекращении текущего процесса или вызове функции обработки сигнала. Если ребенок уже вышел к моменту вызова (так называемый процесс «зомби»), функция немедленно возвращается. Любые системные ресурсы, используемые ребенком, освобождаются.

 waitpid функция приостанавливает выполнение текущего процесса до тех пор, пока не будет завершен дочерний процесс, указанный в аргументе pid, или пока не будет доставлен сигнал, действие которого заключается в прекращении текущего процесса или вызове функции обработки сигнала. Если дочерний элемент, запрошенный pid, уже вышел к моменту вызова (так называемый процесс «зомби»), функция немедленно возвращается. Любые системные ресурсы, используемые ребенком, освобождаются.

Значение pid может быть одним из:

< -1

что означает ожидание любого дочернего процесса, чей идентификатор группы процессов равен абсолютному значению pid.

-1

что означает ждать любого дочернего процесса; это то же самое поведение, которое Подождите экспонаты.

что означает ожидание любого дочернего процесса, чей идентификатор группы процессов равен идентификатору вызывающего процесса.

> 0

что означает ожидание ребенка, чей идентификатор процесса равен значению pid.

Значением параметров является ИЛИ, равное нулю или более из следующих констант:

WNOHANG

что означает немедленное возвращение, если ни один ребенок не вышел.

WUNTRACED

что означает также возвращаться для детей, которые остановлены и чей статус не сообщается.

(Варианты только для Linux см. Ниже.)

Если статус не ЗНАЧЕНИЕ NULLПодождите или же waitpid хранить информацию о состоянии в месте, указанном в bystatus.

Этот статус можно оценить с помощью следующих макросов (эти макросы принимают буфер статистики ( ИНТ) в качестве аргумента — не указатель на буфер!):

WIFEXITED (статус)

не равен нулю, если ребенок вышел нормально.

WEXITSTATUS (статус)

оценивает до наименее значимых восьми битов кода возврата дочернего элемента, который завершился, что, возможно, было установлено в качестве аргумента для вызова Выход() или в качестве аргумента для  вернуть постановка в основной программе. Этот макрос может быть оценен только если WIFEXITED вернулся ненулевой.

WIFSIGNALED (статус)

возвращает true, если дочерний процесс завершился из-за сигнала, который не был перехвачен.

WTERMSIG (статус)

возвращает номер сигнала, вызвавшего завершение дочернего процесса. Этот макрос может быть оценен только если WIFSIGNALED вернулся ненулевой.

WIFSTOPPED (статус)

возвращает true, если дочерний процесс, вызвавший возврат, в данный момент остановлен; это возможно только в том случае, если вызов был выполнен с использованием WUNTRACED.

WSTOPSIG (статус)

возвращает номер сигнала, который заставил ребенка остановиться. Этот макрос может быть оценен только если WIFSTOPPED вернулся ненулевой.

Некоторые версии Unix (например, Linux, Solaris, но не AIX, SunOS) также определяют макрос  WCOREDUMP (статус) проверить, сбрасывает ли дочерний процесс ядро. Используйте только это в #ifdef WCOREDUMP … #endif.

Возвращаемое значение

Идентификатор процесса ребенка, который вышел, или ноль, если WNOHANG был использован, и дочерний элемент недоступен, или -1 при ошибке (в этом случае для errno задано подходящее значение).

ошибки

ECHILD

если процесс, указанный в pid, не существует или не является дочерним по отношению к вызывающему процессу. (Это может произойти для собственного потомка, если для SIGCHLD установлено значение SIG_IGN. См. Также раздел LINUX NOTES о потоках.)

EINVAL

если аргумент параметров был недействительным.

EINTR

если WNOHANG не был установлен и разблокированный сигнал или SIGCHLD был пойман.

Ссылка на основную публикацию