Открыть сервис

Демон: фоновый процесс в Unix

Демон (от англ. daemon) — в операционных системах семейства Unix и Unix-подобных системах фоновый процесс, запускаемый системой или пользователем и работающий без непосредственного взаимодействия с пользователем. Демоны обычно запускаются при загрузке системы, выполняют служебные функции (сетевые службы, планировщики, системный журнал) и продолжают работать до завершения системы или явной остановки. Термин происходит от аббревиатуры «Disk And Execution MONitor» (дисковый и исполнительный монитор), введённой в Массачусетском технологическом институте в 1963 году для проекта MAC, хотя существует и популярная трактовка, связывающая название с демонами из мифологии и фольклора — существами, выполняющими скрытую работу.

История

Концепция фоновых процессов возникла в ранних мультипрограммных системах, где требовалось выполнение задач без участия оператора. В Unix демоны появились в начале 1970-х годов. Одним из первых стал процесс cron (планировщик заданий), созданный Кеном Томпсоном в 1975 году. Название cron происходит от греческого «chronos» (время). Позднее появились sendmail (почтовый сервер, 1981), inetd (суперсервер для сетевых служб, 1985) и другие.

В современных Unix-системах (Linux, BSD, macOS) демоны управляются системой инициализации — init, systemd или launchd. Традиционно демоны запускаются через init-скрипты, но с 2010-х годов в большинстве дистрибутивов Linux используется systemd, который вводит собственный формат юнитов и служб.

Характеристики

Классический демон обладает следующими признаками:

  • Отсутствие терминала: демон не связан ни с одним управляющим терминалом, что исключает взаимодействие с пользователем через стандартный ввод-вывод.
  • Родительский процесс — init (PID 1): демон, как правило, становится сиротой и усыновляется процессом init (или systemd), что гарантирует его независимость от сеанса пользователя.
  • Работа в фоне: демон не блокирует выполнение других процессов и не выводит данные на экран; его вывод направляется в системный журнал или файлы логов.
  • Длительное время работы: демоны рассчитаны на непрерывную работу в течение длительного времени, вплоть до перезагрузки системы.

Процесс демонизации

Превращение обычного процесса в демона (демонизация) включает несколько стандартных шагов, выполняемых программным кодом:

  1. Вызов fork(), после которого родительский процесс завершается, а дочерний продолжает работу.
  2. Вызов setsid() для создания нового сеанса и освобождения от управляющего терминала.
  3. Повторный вызов fork(), чтобы гарантировать, что процесс не станет лидером сеанса и не сможет вновь получить терминал.
  4. Смена текущего каталога на корневой (/) во избежание блокировки смонтированных файловых систем.
  5. Установка маски прав доступа umask(0) для контроля создаваемых файлов.
  6. Закрытие файловых дескрипторов стандартного ввода, вывода и ошибок, либо их перенаправление в /dev/null или файл журнала.

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

Классификация

Демоны можно разделить по функциональному назначению:

  • Сетевые службы: sshd (удалённый доступ), httpd (веб-сервер), named (DNS-сервер), smbd (файловый сервер SMB).
  • Системные службы: syslogd (системный журнал), crond (планировщик), udevd (управление устройствами), dbus-daemon (шина межпроцессного взаимодействия).
  • Службы печати и графики: cupsd (печать), Xorg (графический сервер).
  • Пользовательские демоны: запускаются от имени обычного пользователя для выполнения фоновых задач (например, синхронизация файлов, загрузка обновлений).

Применение

Демоны обеспечивают базовую функциональность Unix-систем. Без них невозможна работа сети, ведение журналов, выполнение запланированных задач, управление питанием и периферийными устройствами. Архитектура «демон — клиент» лежит в основе большинства серверных приложений: клиент отправляет запрос, демон обрабатывает его и возвращает ответ. Такой подход позволяет обслуживать множество клиентов одновременно и обеспечивает изоляцию серверного кода от пользовательского окружения.

В отличие от служб Windows, демоны Unix исторически не имеют единого централизованного менеджера конфигурации; управление ими осуществляется через сигналы, командные утилиты (systemctl, service, kill) и конфигурационные файлы в каталогах /etc и /usr/local/etc.

См. также

Источники

  • Стивенс У. Р., Раго С. А. «UNIX. Профессиональное программирование», 3-е издание, 2014.
  • Танейбаум Э., Бос Х. «Современные операционные системы», 4-е издание, 2015.
  • Документация проекта systemd (freedesktop.org).
  • The Jargon File, статья «daemon».

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →