exec без виделки
Є, щонайменше, дві причини, чому ви хочете зробити таке:
- Завантаження ланцюга Поточне зображення процесу замінено чимось іншим.
- Перезапуск поточно запущеної програми (може, наприклад, статися під час SIGHUP або такого серверного процесу, перезавантажуючи все і виконуючи абсолютно новий старт). Якимось чином можна стверджувати, що це завантаження ланцюга, лише збігаючись з тією ж програмою.
виделка без exec
Ось що робить кожен демон щоразу, коли він починається (справді двічі). Це робить декілька речей, серед яких оболонка не висить (оскільки початковий процес, який оболонка чекає на завершенні), і демон більше не контролюється терміналом, тому закриття вікна оболонки не вбиває демона.
Ще одне поширене використання - це розгалуження дітей-робітників, про які прославився веб-сервер apache близько 25 років тому (нині це вже не вважається сучасним через те, що він дуже схильний до громозахисної проблеми стада, але це, безумовно, забезпечує чорт простіший, можливий найнадійніший сервер).
Ще одне поширене використання - це створення послідовного знімка. fork
не тільки створює процес, він також копіює (теоретично, насправді він лише позначає сторінки копіювати-записувати) адресний простір. Це (атомно) створює знімок повних програмних даних, які батько більше не може змінювати.
Деякі програми цим користуються. Наприклад, redis зберігає дані на диску (у послідовному стані), одночасно змінюючи набір даних одночасно. Це працює лише тому, що fork
створено послідовний знімок, який не бачить модифікацій, внесених батьківським процесом.