Вивчення основних команд операційної системи Linux. Вивчення файлової системи процесів /proc. Вивчення роботи «демонів». Програма «клієнт-сервер»
13

3. Вивчення роботи «демонів»

 

 

Демонами в Linux традиційно називаються процеси, які не взаємодіють з користувачем напряму. У процеса-демона не має управляючого терміналу і не має, відповідно, користувацького інтерфейсу. Для управління демонами приходиться використовувати інші програми. Сама назва «демони» виникла внаслідок того, що процесів цього типу більшість часу проводять в очікуванні якоїсь події. Коли ця подія наступає, демон активізується, виконуючи свою роботу і знову переходить в режим очікування.

При виконанні даного завдання мною була написана на мові програмування С++ «програма-демон», котра слідкує за операціями монтування/демонтування дисководу.

Для організації роботи «програми-демона», я скористався функцією fork(), з допомогою якої програма створює свій дублікат, що називається дочірнім процесом. Батьківський процес продовжує виконувати програму з тієї точки, де була викликана функція fork(). Те ж саме робить і дочірній процес.

Ідентифікатор дочірнього процесу відрізняється від ідентифікатора батьківського процесу. Таким чином, програма може викликати функцію getpid() і довідатися, де саме вона знаходиться. Але сама функція fork() реалізує інший спосіб: вона повертає різні значення в батьківському і дочірньому процесах. Батьківський процес одержує ідентифікатор свого нащадка, а дочірньому процесу повертається 0. У системі немає процесів з нульовим ідентифікатором, так що програма легко розбирається в ситуації.

Для того щоб відключитись від термінала, демон повинен начати нову сесію, не пов’язану з будь-яким терміналом. Для того що демон міг розпочати нову сесію, він повинен бути лідером якої-небудь іншої сесії. Виклик fork() створює дочірній процес, який початково не є лідером сесії. Далі дочірній процес, отриманий з допомогою fork(), починає нову сесію з допомогою виклику функції setsid(). При цьому процес стає лідером нової сесії.