Skip to main content

Wait - команда Linux - команда Unix

Если принтер не печатает ставит в очередь / Нужно изменить порт (Июнь 2026)

Если принтер не печатает ставит в очередь / Нужно изменить порт (Июнь 2026)
Anonim

название

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

конспект

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

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

Описание

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

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

Значение ПИД-регулятор может быть одним из:

< -1

что означает ждать любого дочернего процесса, идентификатор группы процессов которого равен абсолютной величине ПИД-регулятор .

-1

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

0

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

> 0

что означает ждать, пока ребенок, чей идентификатор процесса равен значению ПИД-регулятор .

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

WNOHANG

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

WUNTRACED

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

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

Если статус не являетсяНОЛЬ, Подождите или жеwaitpid сохранять информацию о состоянии в местоположении, на которое указывает статус .

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

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

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

EINVAL

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

EINTR

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