Ответ
Демон (daemon) — это фоновый процесс в Linux, который работает независимо от управляющего терминала и обычно запускается при старте системы для выполнения сервисных задач (веб-сервер, cron, системный логгер).
Характеристики демона:
- Отсоединение от терминала: Демон не имеет управляющего TTY. Это предотвращает получение сигналов (например, SIGHUP) при закрытии терминала пользователя.
- Работа в фоне: Не требует интерактивного ввода от пользователя.
- Именование: Имена демонов часто оканчиваются на
d(systemd,sshd,nginx). - Родительский процесс: Обычно имеет PID 1 (
systemdилиinit) в качестве родителя после завершения процесса-родителя, создавшего демона.
Как создается демон (классический способ):
fork(): Создание дочернего процесса и завершение родительского.setsid(): Создание новой сессии и группы процессов, отвязка от управляющего терминала.chdir("/"): Смена рабочей директории на корневую, чтобы не блокировать точки монтирования.umask(0): Сброс маски создания файлов для полного контроля над правами.- Закрытие файловых дескрипторов (
close(STDIN_FILENO)и т.д.).
Управление демонами в современных системах (через systemd):
# Просмотр статуса демона
sudo systemctl status nginx
# Запуск, остановка, перезагрузка
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl reload nginx # Для применения конфигов без простоя
# Включение/отключение автозапуска
sudo systemctl enable nginx
sudo systemctl disable nginx
# Просмотр логов демона
sudo journalctl -u nginx -f
Практический пример: Когда я настраиваю собственное приложение как сервис, я создаю unit-файл для systemd:
# /etc/systemd/system/my-app.service
[Unit]
Description=My Custom Application
After=network.target
[Service]
Type=simple
User=appuser
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/python3 /opt/myapp/app.py
Restart=on-failure
[Install]
WantedBy=multi-user.target
Это обеспечивает управление жизненным циклом, логирование через journald и автоматический перезапуск при сбоях.