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