FORK(2)
НАЗВАНИЕ
fork - создание нового процесса
СИНТАКСИС
int fork ( )
ОПИСАНИЕ
Вызов fork приводит к созданию нового процесса (порожденного процесса) - точной копии процесса, сделавшего
вызов (родительского процесса). Точнее, порожденный
процесс наследует у родительского процесса следующие
характеристики:
- Окружение.
- Флаг "закрыть при выполнении вызова exec" [см.
exec(2)].
- Способы обработки сигналов (то есть SIG_DFL,
SIG_IGN, SIG_HOLD, адреса функций обработки сигналов).
- Разрешение переустанавливать действующий идентификатор пользователя.
- Разрешение переустанавливать действующий идентификатор группы.
- Состояние профилирования (включено/выключено).
- Значение поправки к приоритету [см. nice(2)].
- Все присоединенные разделяемые сегменты памяти
[см. shmop(2)].
- Идентификатор группы процессов.
- Идентификатор группы терминала [см. exit(2)].
- Текущий рабочий каталог.
- Корневой каталог.
- Маска режима создания файлов [см. umask(2)].
- Ограничение на размер файла [см. ulimit(2)].
Порожденный процесс отличается от родительского процесса следующим:
- Порожденный процесс имеет свой уникальный идентификатор процесса.
- Порожденный процесс имеет иной идентификатор родительского процесса, равный идентификатору процесса, его породившего.
- Порожденный процесс имеет свои собственные копии
родительских дескрипторов файлов. Каждый дескриптор файла порожденного процесса разделяет с соответствующим родительским дескриптором файла общий
указатель текущей позиции в файле.
- Все semadj значения сбрасываются [см. semop(2)].
- Порожденный процесс не наследует у родительского
процесса признаков удержания в памяти сегмента команд, данных или всего процесса целиком
- [см.
plock(2)].
- Обнуляются счетчики времени, потраченного для обслуживания этого процесса (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 присваивается код ошибки.