Что такое демон в linux

Что такое демон в linux

Де́мон (daemon, dæmon, др.-греч. δαίμων божество) — компьютерная программа в системах класса UNIX, запускаемая самой системой и работающая в фоновом режиме без прямого взаимодействия с пользователем.

Демоны обычно запускаются во время загрузки системы. Типичные задачи демонов: серверы сетевых протоколов (HTTP, FTP, электронная почта и др.), управление оборудованием, поддержка очередей печати, управление выполнением заданий по расписанию и т. д. В техническом смысле демоном считается процесс, который не имеет управляющего терминала. Чаще всего (но не обязательно) предком демона является init — корневой процесс UNIX. Традиционно названия демон-процессов заканчиваются на букву d, чтобы показать, что этот процесс является демоном, и для различия нормальной компьютерной программы и демона.

В операционных системах Solaris 10 и OpenSolaris для управления демонами используется специальный механизм — Service Management Facility.

В системах Windows аналогичный класс программ называется службой (англ. Services ).

Термин [ править | править код ]

Термин был придуман программистами проекта MAC Массачусетского технологического института, он отсылает к персонажу мысленного эксперимента, демону Максвелла, занимающегося сортировкой молекул в фоновом режиме. [1] Системы UNIX унаследовали данную терминологию.

Демон также является персонажем греческой мифологии, выполняющим задачи, за которые не хотят браться боги. Как утверждается в «Справочнике системного администратора UNIX», в Древней Греции понятие «персональный даймон» было, отчасти, сопоставимо с современным понятием «ангел-хранитель». [2]

Иногда слово daemon интерпретируют как акроним англ. Disk and execution monitor . Операционные системы семейства BSD используют изображение демона в качестве логотипа, иллюстрируя дальнейшее развитие понятия демона уже в христианской традиции.

  • Переводы, 3 января 2017 в 20:37
  • Иван Бирюков

Если вы когда-нибудь работали c Unix-системами, то наверняка слышали термин “демон”. В этой статье я хочу объяснить, что это за демоны и как они работают, тем более что их название заставляет думать, что это что-то плохое.

Вообще демон — это фоновый процесс, который не привязан к терминалу, в котором был запущен. Но как они создаются, как они связаны с другими процессами, как они работают? Об этом мы и поговорим, но сперва давайте узнаем, как работает процесс init и как происходит рождение новых процессов.

Читайте также:  Как бороться с конденсатом в туалете

Как работает процесс Init

Для начала поговорим о процессе init, также известном как PID 1 (поскольку его ID всегда равен 1). Это процесс создаётся сразу при запуске системы, то есть все другие процессы являются его потомками.

Обычно init запускается, когда ядро вызывает конкретный файл, обычно находящийся по адресу /etc/rc или /etc/inittab. Процесс устанавливает путь, проверяет файловую систему, инициализирует серийные порты, задаёт время и т.д. В последнюю очередь он запускает все необходимые фоновые процессы — в виде демонов. Все демоны обычно расположены в папке /etc/init.d/; принято оканчивать имена демонов на букву d (например, httpd, sshd, mysqld и т.п.), поэтому вы можете подумать, что директория названа так по этому же принципу, но на самом деле существует соглашение об именовании папок, содержащих конфигурационные файлы, именем с суффиксом .d. Итак, init запускает демонов, но мы так и не выяснили, как это происходит. Процесс init запускает демонов, создавая свои ответвления для запуска новых процессов.

Как работает разветвление процессов

Единственный способ создать новый процесс в Unix — скопировать существующий. Этот метод, известный как разветвление или форкинг, включает в себя создание копии процесса в виде потомка и системный вызов exec для запуска новой программы. Мы использовали слово “форкинг”, поскольку fork — это реальный метод C в стандартной библиотеке Unix, который создаёт новые процессы именно таким образом. Процесс, вызывающий команду fork, считается родительским по отношению к созданному. Процесс-потомок почти полностью совпадает с родительским: отличаются лишь ID, родительские ID и некоторые другие моменты.

В современных дистрибутивах Unix и Linux процессы можно создавать и другим способами (например, при помощи posix_spawn), но большая часть процессов создаётся именно так.

«Яндекс», Москва, от 100 000 до 250 000 ₽

Теперь, когда вы узнали о традиционном значении термина “fork”, становится понятно, почему такое же понятие используется на GitHub. Но я отвлекся — вернемся к нашим демонам!

Как работают демоны

Схема демона Максвелла

Прежде чем мы углубимся в работу демонов, давайте выясним, откуда взялось это название. Термин “демон” возник из Project MAC, который в свою очередь получил своё имя от демона Максвелла — вымышленного существа из мысленного эксперимента, которое постянно сортирует молекулы. Само слово демон происходит от греческого daemon, являющегося сверхъестественным существом, которое постоянно работает на заднем плане и не является добрым или злым (в отличие от обычного современного значения). То есть, термин “демон” (в смысле Unix-процесса) на самом деле произошёл от вымышленного сверхъестественного существа.

Читайте также:  Текст для кодирования информации

Демоны — это фоновые процессы, работающие отдельно от терминала и почти всегда созданные процессом init; обычно они занимаются такими вещами, как сетевые запросы, работой аппаратного обеспечения и прочими заданиями типа “жди и смотри”.

Демоны появляются двумя способами. Их может создать процесс init, либо же они возникают в следущей ситуации: процесс создаёт своего потомка и тут же завершается. Первый случай ясен, но что происходит во втором: как процесс init становится родительским для этих демонов?

Когда вы создаёте процесс-потомок и тут же “убиваете” его родителя, потомок становится процессом-сиротой (не стоит путать с процессом-зомби, например, потомком, который был завершен, но всё ещё ждёт, когда родитель прочтёт его exit-статус). По умолчанию, если процесс становится сиротой, то его “приёмным” родителем становится init. Вот и всё, что делает демонов уникальными!

Заключение

В целом демоны — это очень простая для понимания концепция, но чтобы полностью в них разобраться, нам понадобилось узнать, что такое init-процесс и как устроено разветвление процессов.

Демоны обычно имеют конфигурационные файлы и выделяются тем. что могут запускаться и останавливаться пользователем вручную командами вида: service deamonname start / service deamonname stop / service deamonname restart

Чтобы найти конфигурационные файлы пакета можно использовать whereis:

Вывод команды примерно следующий:

apache2: /usr/sbin/apache2 /usr/lib/apache2 /etc/apache2 /usr/share/apache2 /usr/share/man/man8/apache2.8.gz

Также информацию о конфигурационных файлах часто можно найти в man программного пакета

В случае с самым распространенным веб-сервером — конфигурационные файлы находятся в /etc/apache2

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

В конфигах задается логирование — в случае если пакет работает неправильно — включить логирование или изменить его параметры.

Читайте также:  Как отключить антивирус мс afee

Часто демоны работают от имени системных пользователей, специально для них создаваемых — так apache может работать от имени пользователя www-data или от имени пользователя apache.

Демоны Linux стартуют вместе с системой, родительским процессом для них является init

Запуск демона с использованием init синтаксиса:

Инициализационные скрипты демонов, управляемых init, можно посмотреть в каталоге /etc/init.d/

В инициализационных скриптах указываются, в частности, runlevel-ы на которых демон стартует и останавливается.

Runlevels в Linux

Выключенное состояние (ядро не функционирует)
1 Режим использования одним пользователем (ядро функционирует, возможна авторизация, никакие сервисы не работают)
2 Режим, позволяющий работать нескольким пользователем и сети
3 Мультипользовательский режим с сетью
5 Мультипользовательский режим с сетью и GUI
6 Перезагрузка

В современном Linux init используется все реже поскольку данная система является устаревшей — она была создана довольно давно и плохо работает при необходимости обрабатывать данные поступающие в несколько потоков.

Замещается init системами upstart и systemd

upstart замещает все инициализационные скрипты конфигурационными файлами, они находятся в /etc/init

Управляются демоны, использующие upstart, следующим образом:

В 2014 году наметился переход от upstart к systemd. Многие дистрибутивы сейчас используют одновременно несколько систем инициализации.

Среди использующих systemd — Fedora:

Также используя systemd можно легко добавлять демоны в автозагрузку (демон будет стартовать при старте системы)

В init и upstart для того чтобы включить/выключить автозагрузку достаточно добавить/удалить инициализационный файл или скрипт из каталога /etc/init в init и /etc/init.d в upstart (или воспользоваться скриптом update-rc.d — update-rc.d defaults apache2 чтобы добавить сервис в автозагрузку и update-rc.d remove apache2 чтобы его удалить из автозагрузки).

Часто применяется также runit — удобная система, которая также позволяет управлять сервисами (sv s apache2 / sv t apache2 / sv d apache2).

На одной машине могут использоваться демоны, управляемые при помощи различных систем инициализации. Так на сервере часть ПО может запускаться посредством init скриптов, часть — под runit.

Читайте про то, как добавить собственный скрипт, который будет выполняться после старта системы. Часто это бывает нужно чтобы добавить дополнительный функционал и свои скрипты.

Ссылка на основную публикацию
Adblock detector