FORK(2)

НАЗВАНИЕ
fork - создание нового процесса

СИНТАКСИС


        int fork ( )

ОПИСАНИЕ
Вызов fork приводит к созданию нового процесса (порожденного процесса) - точной копии процесса, сделавшего вызов (родительского процесса). Точнее, порожденный процесс наследует у родительского процесса следующие характеристики:

  1. Окружение.
  2. Флаг "закрыть при выполнении вызова exec" [см. exec(2)].
  3. Способы обработки сигналов (то есть SIG_DFL, SIG_IGN, SIG_HOLD, адреса функций обработки сигналов).
  4. Разрешение переустанавливать действующий идентификатор пользователя.
  5. Разрешение переустанавливать действующий идентификатор группы.
  6. Состояние профилирования (включено/выключено).
  7. Значение поправки к приоритету [см. nice(2)].
  8. Все присоединенные разделяемые сегменты памяти [см. shmop(2)].
  9. Идентификатор группы процессов.
  10. Идентификатор группы терминала [см. exit(2)].
  11. Текущий рабочий каталог.
  12. Корневой каталог.
  13. Маска режима создания файлов [см. umask(2)].
  14. Ограничение на размер файла [см. ulimit(2)].

Порожденный процесс отличается от родительского процесса следующим:

  1. Порожденный процесс имеет свой уникальный идентификатор процесса.
  2. Порожденный процесс имеет иной идентификатор родительского процесса, равный идентификатору процесса, его породившего.
  3. Порожденный процесс имеет свои собственные копии родительских дескрипторов файлов. Каждый дескриптор файла порожденного процесса разделяет с соответствующим родительским дескриптором файла общий указатель текущей позиции в файле.
  4. Все semadj значения сбрасываются [см. semop(2)].
  5. Порожденный процесс не наследует у родительского процесса признаков удержания в памяти сегмента команд, данных или всего процесса целиком
    [см. plock(2)].
  6. Обнуляются счетчики времени, потраченного для обслуживания этого процесса (tms_utime, tms_stime, tms_cutime, tms_cstime). Отменяется запрос к будильнику. См. times(2) и alarm(2).

Системный вызов fork завершается неудачей и новый процесс не порождается, если выполнено хотя бы одно из следующих условий:

[EAGAIN]
Создать процесс запрещает системное ограничение на общее количество процессов.
[EAGAIN]
Создать процесс запрещает системное ограничение на количество процессов у одного пользователя.
[EAGAIN]
Общее количество системной памяти, предоставленной для физического ввода/вывода, временно оказалось недостаточным.

СМ. ТАКЖЕ
alarm(2), exec(2), exit(2), nice(2), plock(2), ptrace(2), semop(2), shmop(2), signal(2), sigset(2), times(2), ulimit(2), umask(2), wait(2).

ДИАГНОСТИКА
При успешном завершении порожденному процессу возвращается 0, а родительскому процессу возвращается идентификатор порожденного процесса. В случае ошибки родительскому процессу возвращается -1, не создается нового процесса и переменной errno присваивается код ошибки.