9.1.1. Создание процесса: fork()

9.1.1. Создание процесса: fork()

Первым шагом в запуске новой программы является вызов fork():

#include <sys/types.h> /* POSIX */

#include <unistd.h>

pid_t fork(void);

Использование fork() просто. Перед вызовом один процесс, который мы называем родительским, является запущенным. Когда fork() возвращается, имеется уже два процесса: родительский и порожденный (child).

Вот ключ: оба процесса выполняют одну и ту же программу. Два процесса могут различить себя, основываясь на возвращённом fork() значении:

Отрицательное

Если была ошибка, fork() возвращает -1, а новый процесс не создается. Работу продолжает первоначальный процесс.

Нулевое

В порожденном процессе fork() возвращает 0.

Положительное

В родительском процессе fork() возвращает положительный идентификационный номер (PID) порожденного процесса.

Код шаблона для создания порожденного процесса выглядит следующим образом:

pid_t child;

if ((child = fork()) < 0)

 /* обработать ошибку */

else if (child == 0)

 /* это новый процесс */

else

 /* это первоначальный родительский процесс */

pid_t является знаковым целым типом для хранения значений PID. Скорее всего, это просто int, но специальный тип делает код более понятным, поэтому он должен использоваться вместо int.

На языке Unix, помимо названия системного вызова, слово «fork» является и глаголом, и существительным[88]. Мы можем сказать, что «один процесс ответвляет другой», и что «после разветвления работают два процесса». (Думайте «развилка (fork) на дороге», а не «вилка (fork), нож и ложка».)

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

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

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

7.1 СОЗДАНИЕ ПРОЦЕССА

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

7.1 СОЗДАНИЕ ПРОЦЕССА Единственным способом создания пользователем нового процесса в операционной системе UNIX является выполнение системной функции fork. Процесс, вызывающий функцию fork, называется родительским (процесс-родитель), вновь создаваемый процесс называется


9.1.2.1 Выгрузка при выполнении системной функции fork

Из книги Процессы жизненного цикла программных средств автора Автор неизвестен

9.1.2.1 Выгрузка при выполнении системной функции fork В описании системной функции fork (раздел 7.1) предполагалось, что процесс-родитель получил в свое распоряжение память, достаточную для создания контекста потомка. Если это условие не выполняется, ядро выгружает процесс из


9.2.1.1 Функция fork в системе с замещением страниц

Из книги Linux-сервер своими руками автора Колисниченко Денис Николаевич

9.2.1.1 Функция fork в системе с замещением страниц Как уже говорилось в разделе 7.1, во время выполнения функции fork ядро создает копию каждой области родительского процесса и присоединяет ее к процессу-потомку. В системе с замещением страниц ядро по традиции создает


5.1. Системные вызовы fork() и ехес()

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

5.1. Системные вызовы fork() и ехес() Процесс в Linux (как и в UNIX) — это программа, которая выполняется в отдельном виртуальном адресном пространстве. Когда пользователь регистрируется в системе, под него автоматически создается процесс, в котором выполняется оболочка (shell),


1.5. Действие команд fork, exec и exit на объекты IPC

Из книги QNX/UNIX [Анатомия параллелизма] автора Цилюрик Олег Иванович

1.5. Действие команд fork, exec и exit на объекты IPC Нам нужно достичь понимания действия функций fork, exec и _exit на различные формы IPC, которые мы обсуждаем (последняя из перечисленных функций вызывается функцией exit). Информация по этому вопросу сведена в табл. 1.4.Большинство функций


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

Из книги Linux программирование в примерах автора Роббинс Арнольд

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


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

Из книги Недокументированные и малоизвестные возможности Windows XP автора Клименко Роман Александрович

Создание нового процесса Созданию процессов (имеется в виду создание процесса из программного кода) посвящено столько описаний [1-9], что детальное рассмотрение этого вопроса было бы лишь пересказом. Поэтому мы ограничимся только беглым перечислением этих возможностей,


9.1.1.1. После fork() : общие и различные атрибуты

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

9.1.1.1. После fork(): общие и различные атрибуты Порожденный процесс «наследует» идентичные копии большого числа атрибутов от родителя. Многие из этих атрибутов специализированы и здесь неуместны. Поэтому следующий список намеренно неполон. Существенны


10.9. Сигналы, передающиеся через fork() и exec()

Из книги Операционная система UNIX автора Робачевский Андрей М.

10.9. Сигналы, передающиеся через fork() и exec() Когда программа вызывает fork(), ситуация с сигналами в порожденном процессе почти идентична ситуации в родительском процессе. Установленные обработчики остаются на месте, заблокированные сигналы остаются заблокированными и т.д.


Создание, завершение и просмотр учетной записи процесса

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

Создание, завершение и просмотр учетной записи процесса К другим основным возможностям инструментария управления WMI относятся возможности работы с процессами, запущенными на удаленном или локальном компьютере. При этом инструментарий предоставляет возможности не


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

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

Создание процесса Как уже обсуждалось, в UNIX проведена четкая грань между программой и процессом. Каждый процесс в конкретный момент времени выполняет инструкции некоторой программы, которая может быть одной и той же для нескольких процессов.[39] Примером может служить


4.7. Функции fork и exec

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

4.7. Функции fork и exec Прежде чем рассматривать создание параллельного сервера (что мы сделаем в следующем разделе), необходимо описать функцию Unix fork. Эта функция является единственным способом создания нового процесса в Unix.#include <unistd.h>pid_t fork(void);Возвращает: 0 в дочернем


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

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

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