FORK(2) 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 присваивается код ошибки.
|