Назва

fork — створює процес-нащадок.

Синопсис

#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);

Опис

fork створює процес-нащадок, котрий відрізняється від батьківського лише своїм ідентифікатором (PID), ідентифікатором батьківського процесу (PPID), а також фактом, що використання ресурсів встановлюється в 0. Замки на файли та поточні сиґнали не успадковуються.

Під Linux fork реалізовано з використанням «copy-on-write» — копії сторінок пам'яті робляться лише при записі в них. Отже, ціною брунькування є лише час на копіювання батьківської таблиці сторінок і створення унікальної структури задачі для нащадка.

Повернене значення

В разі успіху, в потік виконання батьківського процесу повертається PID процесу-нащадка, а в потік нащадка — 0. При невдачі в батьківський контекст повертається -1, а змінна errno отримує відповідне значення.

Помилки

EAGAIN : fork не може розмістити достатньо пам'яті для копії батьківських таблиць сторінок і розмістити структуру задачі для нащадка.

ENOMEM : fork не зміг розмістити необхідні структури ядра через нестачу пам'яті.

Відповідність стандартам

Виклик fork відповідає SVr4, SVID, POSIX, X/OPEN, BSD4.3.

Дивіться також

?clone (2), execve (2), vfork (2), ?wait (2).