Як працюють демони, процес init і як у процесів народжуються нащадки

Як працюють демони, процес init і як у процесів народжуються нащадки

Якщо ви коли-небудь працювали 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-процес і як влаштовано розгалуження процесів.