В многозадачных компьютерных операционных системах демон ( / ˈ d iː m ən / или / ˈ d eɪ m ən / ) [1] — это компьютерная программа , которая работает как фоновый процесс , а не находится под прямым контролем интерактивного пользователя. Традиционно имена процессов демона заканчиваются буквой d , для пояснения того, что процесс на самом деле является демоном, и для различения демона и обычной компьютерной программы. Например, syslogd — это демон, который реализует функцию системного журналирования, а sshd — это демон, который обслуживает входящие SSH- подключения.
В среде Unix родительским процессом демона часто, но не всегда, является процесс init . Демон обычно создается либо процессом, разветвляющим дочерний процесс, а затем немедленно завершающим работу, тем самым заставляя init принять дочерний процесс, либо процессом init, напрямую запускающим демон. Кроме того, демон, запущенный разветвлением и завершением работы, обычно должен выполнять другие операции, такие как отсоединение процесса от любого управляющего терминала (tty). Такие процедуры часто реализуются в различных удобных процедурах, таких как daemon(3) в Unix.
Системы часто запускают демоны во время загрузки , которые будут отвечать на сетевые запросы, активность оборудования или другие программы, выполняя некоторые задачи. Демоны, такие как cron, также могут выполнять определенные задачи в запланированное время.
Термин был придуман программистами проекта MAC Массачусетского технологического института . По словам Фернандо Дж. Корбато , работавшего над проектом MAC около 1963 года, его команда была первой, кто использовал термин «демон», вдохновленный демоном Максвелла , воображаемым агентом в физике и термодинамике , который помогал сортировать молекулы, заявив: «Мы причудливо начали использовать слово «демон» для описания фоновых процессов, которые работали не покладая рук, выполняя системные задачи». [2] Системы Unix унаследовали эту терминологию. Демон Максвелла согласуется с интерпретацией демона в греческой мифологии как сверхъестественного существа, работающего на заднем плане.
В общем смысле, daemon — это старая форма слова «демон», от греческого δαίμων . В Unix System Administration Handbook Эви Немет утверждает следующее о daemons: [3]
Многие люди отождествляют слово «демон» со словом «демон», подразумевая некую сатанинскую связь между UNIX и подземным миром . Это вопиющее недоразумение. «Демон» на самом деле гораздо более старая форма слова «демон»; демоны не имеют особой предвзятости к добру или злу, а скорее помогают определить характер или личность человека. Древнегреческая концепция «личного демона» была похожа на современную концепцию «ангела-хранителя» — эвдемония — это состояние, когда добрый дух помогает или защищает вас. Как правило, системы UNIX, похоже, кишат как демонами, так и демонами.
Дальнейшая характеристика мифологического символизма заключается в том, что демон — это нечто невидимое, но всегда присутствующее и исполняющее свою волю. В « Феагах» , приписываемых Платону , Сократ описывает своего личного демона как нечто похожее на современную концепцию моральной совести: «Благосклонность богов дала мне чудесный дар, который никогда не покидал меня с самого детства. Это голос, который, когда он становится услышанным, удерживает меня от того, что я собираюсь сделать, и никогда не подталкивает меня к чему-либо». [ требуется цитата ]
В современном использовании в контексте компьютерного программного обеспечения слово демон произносится / ˈ d iː m ən / DEE -mən или / ˈ d eɪ m ən / DAY -mən . [1]
Альтернативные термины для daemon — service (используется в Windows, начиная с Windows NT и далее, а позже также в Linux), started task (IBM z/OS ), [4] и ghost job (XDS UTS ). Иногда используется более общий термин server или server process , особенно для daemons, которые работают как часть клиент-серверных систем . [5]
После того, как этот термин был принят для использования в компьютерах, он был рационализирован как бэкроним для Disk And Execution MONitor. [6] [1]
Демоны, подключающиеся к компьютерной сети, являются примерами сетевых служб .
В строго техническом смысле, системный процесс типа Unix является демоном, когда его родительский процесс завершается и демону назначается процесс init (процесс номер 1) в качестве родительского процесса и он не имеет управляющего терминала. Однако, в более общем смысле, демоном может быть любой фоновый процесс, независимо от того, является ли он потомком процесса init или нет.
В Unix-подобной системе общепринятый метод превращения процесса в демон, когда процесс запускается из командной строки или из сценария запуска, например сценария init или сценария SystemStarter , включает в себя:
setsid()
:open()
, creat()
и другим вызовам операционной системы предоставлять собственные маски разрешений и не зависеть от umask вызывающего объекта.Если процесс запущен демоном суперсервера , таким как inetd , launchd или systemd , демон суперсервера выполнит эти функции для процесса, [7] [8] [9] за исключением демонов старого стиля, не преобразованных для работы под systemd и указанных как Type=forking [9] и «многопоточных» серверов датаграмм под inetd . [7]
В среде Microsoft DOS программы-демоны были реализованы как резидентные программы (TSR).
В системах Microsoft Windows NT программы, называемые службами Windows, выполняют функции демонов. Они работают как процессы, обычно не взаимодействуют с монитором, клавиатурой и мышью и могут запускаться операционной системой во время загрузки. В Windows 2000 и более поздних версиях службы Windows настраиваются, запускаются и останавливаются вручную с помощью Панели управления , специальной программы управления/конфигурации, компонента Service Controller диспетчера управления службами ( команда sc ), команд net start и net stop или системы сценариев PowerShell .
Однако любое приложение Windows может выполнять роль демона, а не только службы, а некоторые демоны Windows могут работать как обычный процесс.
В классической Mac OS дополнительные функции и службы предоставлялись файлами, загружаемыми при запуске, которые исправляли операционную систему; они были известны как системные расширения и панели управления . Более поздние версии классической Mac OS дополняли их полноценными безликими фоновыми приложениями : обычными приложениями, работающими в фоновом режиме. Для пользователя они по-прежнему описывались как обычные системные расширения.
macOS , являющаяся системой Unix , использует демоны, но использует термин «службы» для обозначения программного обеспечения, выполняющего функции, выбранные в меню «Службы» , а не использует этот термин для демонов, как это делает Windows.