10.4.1. Создание дочерних процессов

10.4.1. Создание дочерних процессов

В Linux предусмотрены два системных вызова, которые создают новые процессы: fork() и clone(). Как упоминалось ранее, clone() используется для создания потоков, и этот вызов будет кратко описан далее. А сейчас мы сосредоточимся на fork() — наиболее популярном методе создания процессов.

#include <unistd.h>

pid_t fork(void);

Этот системный вызов имеет уникальное свойство возвращать управление не один раз, а дважды: один раз в родительском процессе и другой — в дочернем. Обратите внимание, что мы не говорим "первый — в родительском" — написание кода, который делает какие-то предположения относительно предопределенного порядка — очень плохая идея.

Каждый из двух возвратов системного вызова fork() имеет разные значения. В родительский процесс этот системный вызов возвращает pid вновь созданного дочернего процесса, а в дочернем он возвращает 0.

Разница возвращаемых значений — это единственное отличие, видимое процессам. Оба имеют одинаковые образы памяти, права доступа, открытые файлы и обработчики сигналов[19]. Рассмотрим простой пример программы, порождающей дочерний процесс.

#include <sys/types.h>

#include <stdio.h>

#include <unistd.h>

int main(void) {

 pid_t child;

 if (!(child = fork())) {

  printf("в дочернем ");

  exit (0);

 }

 printf("в родительском - дочерний: %d ", child);

 return 0;

}

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

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

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

Создание дочерних окон

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

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


5.7. Диаграммы процессов.

Из книги Объектно-ориентированный анализ и проектирование с примерами приложений на С++ автора Буч Гради

5.7. Диаграммы процессов. Существенное: процессоры, устройства и соединения Диаграммы процессов используются, чтобы показать распределение процессов по процессорам в физическом проекте системы. Отдельная диаграмма процессов показывает один ракурс структуры процессов


1. Создание модели процессов в BPwin

Из книги BPwin и Erwin. CASE-средства для разработки информационных систем автора Маклаков Сергей Владимирович

1. Создание модели процессов в BPwin 1.1. Инструментальная среда BPwin BPwin имеет достаточно простой и интуитивно понятный интерфейс пользователя, дающий возможность аналитику создавать сложные модели при минимальных усилиях. Ниже будет описан интерфейс версии 2.5. Рис. 1.1.


4.14. Упражнение 14. Создание модели ТО-ВЕ (реинжиниринг бизнес-процессов)

Из книги Моделирование бизнес-процессов с BPwin 4.0 автора Маклаков Сергей Владимирович

4.14. Упражнение 14. Создание модели ТО-ВЕ (реинжиниринг бизнес-процессов) Модель ТО-ВЕ создается на основе анализа модели AS-IS. Анализ может проводиться как по формальным признакам (отсутствие выходов или управлений у работ, отсутствие обратных связей и т. д.), так и по


Обработка дочерних узлов

Из книги XSLT автора Хольцнер Стивен

Обработка дочерних узлов Элемент <xsl:apply-templates> дает указание процессору XSLT обрабатывать все совпадающие шаблоны для дочерних узлов контекстного узла. Элемент <xsl:apply-templates> дает возможность явно указать, когда следует закончить обработку дочерних узлов, а это имеет


Выбор дочерних элементов

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

Выбор дочерних элементов При доступе к дочернему узлу определенного узла для разделения имен элементов можно использовать операцию шага /. Пусть, например, требуется создать правило, которое должно применяться только к тем элементам <NAME>, которые являются дочерними


10.4.2. Наблюдение за уничтожением дочерних процессов

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

10.4.2. Наблюдение за уничтожением дочерних процессов Сбор состояний возврата дочернего процесса называется ожиданием процесса. Это можно делать четырьмя способами, хотя только один из вызовов предоставляется ядром. Остальные три метода реализованы в стандартной


10.4.4. Ускоренное создание процессов с помощью vfork()

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

10.4.4. Ускоренное создание процессов с помощью vfork() Обычно процессы, в которых вызывается fork(), немедленно вызывают exec() для другой программы (это то, что оболочка делает всякий раз, когда вы вводите команду), что делает полную семантику fork() более расточительной по


15.1.1. Перезапуск процессов

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

15.1.1. Перезапуск процессов Каждый процесс может пребывать в трех состояниях: выполнение, останов и "зомби". Выполняющиеся процессы завершаются системным вызовом exit() или отправкой сигнала фатального завершения. Процессы перемещаются между состояниями работы и остановки


15.1.2. Остановка процессов

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

15.1.2. Остановка процессов Четыре сигнала перемещают работающий процесс в состояние останова. SIGSTOP никогда не генерируется ядром. Он предназначен для остановки произвольных процессов. Его невозможно захватить или проигнорировать; он всегда останавливает целевой процесс.


3.2. Создание процессов

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

3.2. Создание процессов Существуют два способа создания процессов. Первый из них относительно прост, но применяется редко, поскольку неэффективен и связан со значительным риском для безопасности системы. Второй способ сложнее, но избавлен от недостатков


3.4.4. Асинхронное удаление дочерних процессов

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

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


Эффект наличия слишком большого количества дочерних процессов

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

Эффект наличия слишком большого количества дочерних процессов В табл. 30.1 (строка 2) указано время (1,8 с), затрачиваемое центральным процессором в случае наличия 15 дочерних процессов, обслуживающих не более 10 клиентов. Мы можем оценить эффект «общей побудки», увеличивая


Эффект наличия слишком большого количества дочерних процессов

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

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