fork і exec: як Unix запускає програми
Коротко: Unix запускає нові програми у два кроки: fork копіює працюючий процес, exec замінює в копії програму на іншу.
Докладніше: Так само запускається й кожна команда в оболонці. Такий поділ дає змогу між двома кроками виконати налаштування на кшталт перенаправлень чи прав.
Подробиці
- fork: Створює дочірній процес із майже ідентичним станом. Розрізнити їх дає змогу значення, що повертається: у батька PID нащадка, у нащадка 0. Завдяки Copy-on-Write це дешево.
- exec: Завантажує в процес нову програму. PID лишається, пам’ять і код замінюються.
- wait: Батько чекає завершення нащадка через
wait/waitpid. Якщо забуде, лишиться процес-зомбі. - Перенаправлення: Після
forkі передexecоболонка відкриває файли (>) або канали й призначає їх введенням і виведенням. - Windows: Не знає fork, а має
CreateProcess, що поєднує обидва кроки. - Сучасні альтернативи:
posix_spawnіvforkзаощаджують витрати для великих процесів. - Контейнери: Перший процес у контейнері — PID 1, і він має підбирати осиротілих нащадків.
Див. також: процеси та сигнали