FORK(2)
FORK(2)
НАЗВАНИЕ
fork - создание нового процесса
СИНТАКСИС
int fork ( )
ОПИСАНИЕ
Вызов fork приводит к созданию нового процесса (порожденного процесса) - точной копии процесса, сделавшего вызов (родительского процесса). Точнее, порожденный процесс наследует у родительского процесса следующие характеристики:
- Окружение.
- Флаг "закрыть при выполнении вызова exec" [см. ].
- Способы обработки сигналов (то есть SIG_DFL, SIG_IGN, SIG_HOLD, адреса функций обработки сигналов).
- Разрешение переустанавливать действующий идентификатор пользователя.
- Разрешение переустанавливать действующий идентификатор группы.
- Состояние профилирования (включено/выключено).
- Значение поправки к приоритету [см. ].
- Все присоединенные разделяемые сегменты памяти [см. ].
- Идентификатор группы процессов.
- Идентификатор группы терминала [см. ].
- Текущий рабочий каталог.
- Корневой каталог.
- Маска режима создания файлов [см. ].
- Ограничение на размер файла [см. ].
Порожденный процесс отличается от родительского процесса следующим:
- Порожденный процесс имеет свой уникальный идентификатор процесса.
- Порожденный процесс имеет иной идентификатор родительского процесса, равный идентификатору процесса, его породившего.
- Порожденный процесс имеет свои собственные копии родительских дескрипторов файлов. Каждый дескриптор файла порожденного процесса разделяет с соответствующим родительским дескриптором файла общий указатель текущей позиции в файле.
- Все semadj значения сбрасываются [см. ].
- Порожденный процесс не наследует у родительского процесса признаков удержания в памяти сегмента команд, данных или всего процесса целиком[см. ].
- Обнуляются счетчики времени, потраченного для обслуживания этого процесса (tms_utime, tms_stime, tms_cutime, tms_cstime). Отменяется запрос к будильнику. См. и .
Системный вызов fork завершается неудачей и новый процесс не порождается, если выполнено хотя бы одно из следующих условий:
[EAGAIN] Создать процесс запрещает системное ограничение на общее количество процессов. [EAGAIN] Создать процесс запрещает системное ограничение на количество процессов у одного пользователя. [EAGAIN] Общее количество системной памяти, предоставленной для физического ввода/вывода, временно оказалось недостаточным.
СМ. ТАКЖЕ
, , , , , , , , , , , , , .
ДИАГНОСТИКА
При успешном завершении порожденному процессу возвращается 0, а родительскому процессу возвращается идентификатор порожденного процесса. В случае ошибки родительскому процессу возвращается -1, не создается нового процесса и переменной errno присваивается код ошибки.
Содержание раздела