EMZETT.
Увійти

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, і він має підбирати осиротілих нащадків.

Див. також: процеси та сигнали