5.10. Функции wait и waitpid

5.10. Функции wait и waitpid

В листинге 5.7 мы вызываем функцию wait для обработки завершенного дочернего процесса.

#include <sys/wait.h>

pid_t wait(int *statloc);

pid_t waitpid(pid_t pid, int *statloc, int options);

Обе функции возвращают ID процесса в случае успешного выполнения, -1 в случае ошибки

Обе функции, и wait, и waitpid, возвращают два значения. Возвращаемое значение каждой из этих функций — это идентификатор завершенного дочернего процесса, а через указатель statloc передается статус завершения дочернего процесса (целое число). Для проверки статуса завершения можно вызвать три макроса, которые сообщают нам, что произошло с дочерним процессом: дочерний процесс завершен нормально, уничтожен сигналом или только приостановлен программой управления заданиями (job-control). Дополнительные макросы позволяют получить состояние выхода дочернего процесса, а также значение сигнала, уничтожившего или остановившего процесс. В листинге 15.8 мы используем макроопределения WIFEXITED и WEXITSTATUS.

Если у процесса, вызывающего функцию wait, нет завершенных дочерних процессов, но есть один или несколько выполняющихся, функция wait блокируется до тех пор, пока первый из дочерних процессов не завершится.

Функция waitpid предоставляет более гибкие возможности выбора ожидаемого процесса и его блокирования. Прежде всего, в аргументе pid задается идентификатор процесса, который мы будем ожидать. Значение -1 говорит о том, что нужно дождаться завершения первого дочернего процесса. (Существуют и другие значения идентификаторов процесса, но здесь они нам не понадобятся.) Аргумент options позволяет задавать дополнительные параметры. Наиболее общеупотребительным является параметр WNOHANG: он сообщает ядру, что не нужно выполнять блокирование, если нет завершенных дочерних процессов.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

12.3.3.2 Wait

Из книги Архитектура операционной системы UNIX автора Бах Морис Дж

12.3.3.2 Wait многопроцессорная версия алгоритма wait { для (;;) { /* цикл */ перебор всех процессов-потомков:   if (потомок находится в состоянии "прекращения существования") return;  P(zombie_semaphore);  /* начальное значение — 0 */ }}Рисунок 12.15. Многопроцессорная версия алгоритма waitИз главы 7 мы


R.8.2.5 Функции

Из книги Справочное руководство по C++ автора Страустрап Бьярн

R.8.2.5 Функции В описании T D, в котором D имеет видD1 ( список-описаний-параметров ) список-спецификаций-cv optописываемый идентификатор имеет тип "…список-спецификаций-cv функция с параметрами типа список-описаний-параметров возвращающая


6.12. Функции

Из книги Феномен науки. Кибернетический подход к эволюции автора Турчин Валентин Фёдорович


Функции

Из книги Windows Script Host для Windows 2000/XP автора Попов Андрей Владимирович

Функции Функции в JScript, как и в других алгоритмических языках, позволяют объединить несколько операций под одним именем. В случае необходимости функция может быть вызвана из любого места сценария.В сценариях JScript поддерживаются два вида функций: встроенные функции и


4.5.3. Функции, которые создают новые конфигурации из существующих 4.5.3.1. Функции геометрии, которые производят новые конфигурации

Из книги MySQL: руководство профессионала автора Паутов Алексей В

4.5.3. Функции, которые создают новые конфигурации из существующих 4.5.3.1. Функции геометрии, которые производят новые конфигурации Раздел "4.5.2. Функции Geometry" обсуждает несколько функций, которые создают новые конфигурации из


Функции

Из книги Технология XSLT автора Валиков Алексей Николаевич

Функции Функции значительно расширяют возможности выражений. Они принимают на вход несколько аргументов и возвращают некоторый результат, который иногда является продуктом весьма замысловатого вычисления.Функции можно условно разделить на стандартные функции,


16.5.1. Функции

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.

16.5.1. Функции Интерфейс termios определяет несколько функций. Все они объявлены в <termios.h>. Четыре из них являются обслуживающими функциями для переносимого манипулирования структурой struct termios; остальные представляют собой системные вызовы. Функции, начинающиеся с cf,


Функции

Из книги Краткое введение в программирование на Bash автора Родригес Гарольд

Функции Использование функций делает сопровождение своих скриптов проще. Проще говоря, это хороший способ разделить программу на более мелкие куски. Функция выполняет определенное действие и может возвращать то значение, какое вы пожелаете. Прежде чем продолжать, я


3.4.2. Системные вызовы wait()

Из книги Программирование для Linux. Профессиональный подход автора Митчелл Марк

3.4.2. Системные вызовы wait() Самая простая функция в семействе называется wait(). Она блокирует вызывающий процесс до тех пор, пока один из его дочерних процессов не завершится (или не произойдет ошибка). Код состояния потомка возвращается через аргумент, являющийся указателем


24.1.6. Команда wait

Из книги Linux и UNIX: программирование в shell. Руководство разработчика. автора Тейнсли Дэвид

24.1.6. Команда wait Команда wait применяется для ожидания завершения одного из дочерних процессов. Команду wait можно определить с помощью процесса ID. Если этого не сделать, ожидание будет длиться до завершения всех дочерних процессов.Формат команды ожидания завершения всех


wait

Из книги C++ для начинающих автора Липпман Стенли

wait Формат:wait ID процессаЭта команда устанавливает длительность ожидания для ID процесса перед возобновлением его выполнения либо устанавливает длительность ожидания всех фоновых процессов перед возобновлением их выполнения.Для задания интервала ожидания ID процесса


7. Функции

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

7. Функции Мы рассмотрели, как объявлять переменные (глава 3), как писать выражения (глава 4) и инструкции (глава 5). Здесь мы покажем, как группировать эти компоненты в определения функций, чтобы облегчить их многократное использование внутри программы. Мы увидим, как


Различия между функциями wait и waitpid

Из книги автора

Различия между функциями wait и waitpid Теперь мы проиллюстрируем разницу между функциями wait и waitpid, используемыми для сброса завершенных дочерних процессов. Для этого мы изменим код нашего клиента TCP так, как показано в листинге 5.7. Клиент устанавливает пять соединений с


Функции

Из книги автора

Функции Существует мнемоническое правило: функции не должны по объему кода превышать двух экранов текста и иметь больше десяти локальных переменных. Каждая функция должна выполнять одно действие, но делать это хорошо. Не вредно разбить функцию на последовательность