Що таке демон?


12

Я чую багато розмов про демонів, що працюють на моєму комп'ютері Ubuntu - що вони?

Відповіді:


15

Коротше кажучи, демон - це фоновий процес .

Демони можуть бути просто звичайними програмами, які працюють у фоновому режимі, однак більшість створюються шляхом запуску процесу, розгортання і виходу з батьківського.

Розпакувати процес означає створити точну його копію. Батьком цього процесу, якщо справжній батько припиняється відразу, тепер є процес init/sbin/init , який є першим, що запускається в кожній Unix-подібній операційній системі. Тепер процес називається демоном, він не має з ним пов'язаного TTY.

Ось приклад демона в Python:

import sys, os, time

pid = os.fork()

# there now exist two processes
if pid > 0: # If this is the parent,
    sys.exit(0) # quit.

# this is the background part:
time.sleep(5)
print "Hello, World!"

Це ще не одне, строго кажучи. Вам також доведеться змінити поточний робочий каталог, перенаправити стандартний вхід і вихід на журнали-файли тощо. Ви можете прочитати деталі горі в цій статті у Вікіпедії .

Якщо запустити приклад, ви помітите, через дві секунди він надрукується, навіть незважаючи на те, що процес, розпочатий у командному рядку, закінчився. Копія цього процесу зараз виконується "by" init.


8
щоб розширити це, якщо ви приїжджаєте до Linux із Windows, ви можете вважати демонів як * nix еквівалент "служб" Windows.
nathwill

1
@ stefano-palazzo Ви сказали, "... у нього немає TTY, пов'язаного з цим", але потім "... ви помітите, через дві секунди він друкує ...". Я подумав, що від'єднання TTY означає, що ти не можеш написати до терміналу.
Хорхе Букаран

1
@JorgeBucaran Так. Друк трохи неслухняний. Він все ще може мати ручку до стандартного вихідного потоку tty, який його запустив. Відкриваючи файл (наприклад / dev / stdout), ви отримуєте номер (називається дескриптор файлу), і це все, що вам потрібно написати до нього, доки процес, який його відкрив, все ще працює (ви можете побачити відкриті файли в /proc/*/fd). Добре поведений демон повністю відірветься від tty, відмовившись від ручок для stdout, stderr та stdin.
Стефано Палацо

1
@StefanoPalazzo Я бачу. Можна зберегти посилання на батьківський процес std / out / err і все одно відірватися від нього. Якщо я можу довільно зберігати посилання на TTY, то що означає від'єднання процесу? Я вважаю < superuser.com/questions/178587/… > корисним, але все ще відчуваю себе незрозумілим.
Хорхе Букаран

1
@JorgeBucaran - це означає перезаписати власний stdio процесів (наприклад, використовуючи dup2 ) новими створеними вами (наприклад, файлом журналу). Ось повний приклад
Стефано Палацо

1

У багатозадачних комп'ютерних операційних системах демон - це комп'ютерна програма, яка працює як фоновий процес, а не знаходиться під безпосереднім контролем інтерактивного користувача. Традиційно назви процесу демона закінчуються буквою d, для уточнення того, що процес насправді є демоном, і для розмежування демона від звичайної комп'ютерної програми. Наприклад, syslogd - це демон, що реалізує систему системного журналу, а sshd - демон, який обслуговує вхідні SSH-з'єднання.

Як ви бачите шар Демона


2
звідки цитата?
Занна

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.