[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Создание процесса

Системный вызов fork(2) создает новый процесс, исполняющий точную
копию программы исходного процесса. В основном, новый процесс
(порожденный) идентичен исходному (родителю). В описании fork(2)
перечислены атрибуты, которые порожденный процесс наследует от
родителя, и различия между ними. После завершения fork(2) оба процесса
продолжают исполнение с той точки, где fork(2) возвратил управление.
Процессы могут узнать, кто из них является родителем, а кто
порожденным, на основании значения, возвращенного fork(2).
Родительский процесс получает идентификатор порожденного процесса,
положительное число. Порожденный процесс получает нулевое значение.
Как правило, за fork(2) следует оператор if, который определяет, какой
код исполнять для родительского и какой для порожденного процесса.
Системный вызов fork(2) может завершиться неудачей, если вы пытаетесь
превысить разрешенное количество процессов для каждого пользователя
(обычно около 25) или общее количество процессов в системе (обычно
200-400). Эти два ограничения устанавливаются при конфигурации
операционной системы. Если fork(2) завершается неуспехом, он
возвращает значение -1. Рекомендуется проверять этот и остальные
системные вызовы на предмет неудачного завершения. Часто порожденный
процесс вызывает exec(2) после вызова fork(2). Этот системный вызов
будет обсуждаться вкратце.
                          СОЗДАНИЕ ПРОЦЕССА
fork(2)

ИМЯ

      fork - создать новый процесс

ИСПОЛЬЗОВАНИЕ

      #include <sys/types.h>
      #include <unistd.h>

      pid_t fork(void);

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

      успех - родительский процесс: идентификатор порожденного
                    процесса;
               порожденный процесс : 0

      неуспех - -1 и errno установлена