Démon (software)

Démon (, výslovnost  nebo ) je v informatice označení programu, který je spuštěn dlouhodobě a není v přímém kontaktu s uživatelem (na rozdíl od běžných aplikací) a často není ani závislý na tom, zda je uživatel přihlášen. Démon je součástí multitaskingových operačních systémů a obvykle se spouští při startu systému. Jeho úkolem je vyčkávat v nečinnosti na nějakou událost, tu posléze obsloužit a zajišťovat tak různé úkoly bez nutnosti interakce s uživatelem (obsluha počítačové sítě, tiskové fronty a podobně). Techniku správy těchto démonů zajišťuje systém služeb operačního systému.

Původ označení 
Termín „démon“ byl zaveden v 60. letech 20. století programátory projektu MAC () na MIT. Jméno pochází z Maxwellova démona, imaginární postavy slavného myšlenkového experimentu, která neustále pracuje na pozadí a třídí molekuly. Démoni jsou též charakterističtí pro řeckou mytologii, kde někteří z nich vykonávají práce, kterými se bohové nechtějí zatěžovat. Stejně tak počítačový démon pracuje na pozadí a vykonává práce, kterými nechce být uživatel zatěžován. Unixové systémy terminologii převzaly. FreeBSD a některé příbuzné systémy převzaly démona jako svého maskota, avšak tento maskot je jen roztomilým stereotypním zobrazením křesťanského démona.

V pozdější době byl z názvu vytvořen akronym Disk And Execution MONitor – diskový a prováděcí monitor), případně DEvice MONitor – monitor (vstupně-výstupních) zařízení.

Unixové systémy 
Démon je typickým programem v unixových systémech, kde zajišťuje různé systémové funkce. Jeho název obvykle končí na písmeno „d“, čímž se naznačuje jeho status démona (httpd, sshd, syslogd, klogd, ntpd, …). Nejdůležitějším démonem je zde démon init, který má číslo procesu 1 (PID). Je spuštěn při startu jako první (s výjimkou kernel threadů), je rodičem všech ostatních procesů v systému a řídí přechod do nastaveného runlevelu. Je zodpovědný za spuštění skriptů při startu systému, adoptuje procesy, které ztratí svého rodiče (stane se jejich novým rodičem) a plní i další úkoly.

Postup vzniku démona 
Při programování démona je obvykle využíváno multitaskingu, takže rodičovský démon pouze vyčkává příchodu události, ale neobsluhuje ji sám. Místo toho odštěpí (fork) potomka, který událost obslouží a rodič sám nadále vyčkává příchodu další události. Tento postup zjednodušuje současnou obsluhu více událostí, kdy přenáší odpovědnost za cyklickou obsluhu na operační systém (díky multitaskingu). Dále je vhodné vykonat několik níže uvedených kroků:

 odpojení od řídícího terminálu (tty)
 stát se základním rodičem (rodičem démona bude proces číslo 1)
 přerušit vazbu na svého rodiče pomocí volání funkce fork, kdy rodičovský proces ihned skončí a dále pokračuje jako potomek
 dojde k tomu, že démon (zde jako potomek) je adoptován procesem číslo 1 (init)
 stát se vedoucím skupiny
 nastavit pracovní adresář na kořenový adresář („/“)
 neblokuje se odpojení připojených systémů souborů
 změna umask na 0
 zbavení se závislosti na nastavení umask v procesu rodiče
 uzavření všech otevřených souborů (deskriptorů)
 včetně standardních proudů 0, 1 a 2 (stdin, stdout, stderr)
 potřebné soubory budou otevřeny později, umožňuje čistý fork bez vedlejších efektů a bezpečnostních rizik
 místo standardních proudů (stdin, stdout, stderr) použít logovací subsystém, systémovou konzoli, /dev/null a podobně

Nejznámější démoni 
 sshd – server vzdáleného připojení pomocí šifrované komunikace protokolem SSH
 httpd – webový server (nejčastěji Apache)
 ntpd – server pro synchronizaci času (OpenNTPD, NTPd)

Microsoft Windows 

V prostředí novějších Microsoft Windows (Windows NT, Windows 2000, Windows XP, Windows Vista, Windows 7) je obdobou démona služba Windows. Má separovaný proces, obvykle nekomunikuje s uživatelskými periferiemi (HID, Human Interface Device; monitor, klávesnice a myš), je spouštěna při startu počítače nebo při prvním požadavku. Uživatel s oprávněními administrátora (správce) může obvykle nastavit různé možnosti startu (automaticky, manuálně anebo zakázat) a další parametry (např. chování po pádu služby). Některé služby jsou ovšem vyžadovány již pro komunikaci se zařízeními třídy HID, typicky služba Workstation (Pracovní stanice); některé umožňují základní funkcionalitu architektury, kupř. služba Server, která řídí ostatní procesy; u těchto služeb není možné jejich spouštění zakázat.

DOS 

V systému DOS není přímá podpora pro běh více programů zároveň, natož démonů. Přesto v DOSu existují programy, které mohou podobným způsobem pracovat. Označují se jako TSR (, ).

Správci démonů 
Příklady takových správců:
 Cron – unixový démon pro periodické spouštění úloh
 Inetd – unixový „superdémon“ pro síťové služby TCP/IP
 Service Control Manager – Použito na Microsoft Windows
 launchd – použito na Apple macOS
 OpenRC – některé linuxové distribuce, FreeBSD a NetBSD
 systemd – některé linuxové distribuce
 Upstart – použito u Google Chrome OS a na některých linuxových distribucích
 Service Management Facility – použito u Oracle Solaris
 Android init – použito u Google Android
 sysvinit – některé Unix-like systémy
 runit – použito na Void

Reference

Související články 
 BSD Daemon

Systémový software
Procesy (výpočetní technika)