Якщо ви коли-небудь працювали c Unix-системами, то напевно чули термін "демон". У цій статті я хочу пояснити, що це за демони і як вони працюють, тим більше що їх назва змушує думати, що це щось погане.
Взагалі демон - це фоновий процес, який не прив'язаний до терміналу, в якому був запущений. Але як вони створюються, як вони пов'язані з іншими процесами, як вони працюють? Про це ми і поговоримо, але спершу давайте дізнаємося, як працює процес init і як відбувається народження нових процесів.
Як працює процес Init
Для початку поговоримо про процес init. також відомому як PID 1 (оскільки його ID завжди дорівнює 1). Це процес створюється відразу при запуску системи, тобто всі інші процеси є його нащадками.
Як працює розгалуження процесів
Єдиний спосіб створити новий процес в Unix - скопіювати існуючий. Цей метод, відомий як розгалуження або форкінг, включає в себе створення копії процесу у вигляді нащадка і системний виклик exec для запуску нової програми. Ми використовували слово "форкінг", оскільки fork - це реальний метод C в стандартній бібліотеці Unix, який створює нові процеси саме таким чином. Процес, що викликає команду fork, вважається батьківським по відношенню до створеного. Процес-нащадок майже повністю збігається з батьківським: відрізняються лише ID, батьківські ID і деякі інші моменти.
У сучасних дистрибутивах Unix і Linux процеси можна створювати і іншим способами (наприклад, за допомогою posix_spawn), але більша частина процесів створюється саме так.
Тепер, коли ви дізналися про традиційний значенні терміна "fork", стає зрозуміло, чому таке ж поняття використовується на GitHub. Але я відволікся - повернемося до наших демонам!
Як працюють демони
Схема демона Максвелла
Перш ніж ми заглибимося в роботу демонів, давайте з'ясуємо, звідки взялася ця назва. Термін "демон" виник з Project MAC. який в свою чергу отримав своє ім'я від демона Максвелла - вигаданого істоти з уявного експерименту, яке постує сортує молекули. Саме слово демон походить від грецького daemon. є надприродною істотою, яка постійно працює на задньому плані і не є добрим чи злим (на відміну від звичайного сучасного значення). Тобто, термін "демон" (в сенсі Unix-процесу) насправді походить від вигаданого надприродного істоти.
Демони - це фонові процеси, які працюють окремо від терміналу і майже завжди створені процесом init; зазвичай вони займаються такими речами, як мережеві запити, роботою апаратного забезпечення та іншими завданнями типу "чекай і дивися".
Демони з'являються двома способами. Їх може створити процес init, або ж вони виникають в наступній ситуації: процес створює свого нащадка і тут же завершується. Перший випадок ясний, але що відбувається в другому: як процес init стає батьківським для цих демонів?
Коли ви створюєте процес-нащадок і тут же "вбиваєте" його батька, нащадок стає процесом-сиротою (не варто плутати з процесом-зомбі. Наприклад, нащадком, який був завершений, але все ще чекає, коли батько прочитає його exit-статус) . За замовчуванням, якщо процес стає сиротою, то його "прийомним" батьком стає init. Ось і все, що робить демонів унікальними!
висновок
В цілому демони - це дуже проста для розуміння концепція, але щоб повністю в них розібратися, нам знадобилося дізнатися, що таке init-процес і як влаштовано розгалуження процесів.