Démon (software)
Author
Albert FloresDé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. +more 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, …). +more 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. +more 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 [url= Server|Apache][Secure Shell|SSH]] * httpd - webový server (nejčastěji [[Apache[/url]]) * 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. +more 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.
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