Демон <||> Различия в управлении процессом
Что касается этого отличного поста:
https://stackoverflow.com/questions/958249/whats-the-difference-between-nohup-and-a-daemon
Я хотел бы спросить следующее:
После запуска приложения из моего терминала приложение продолжает работать либо в фоновом режиме, либо на переднем плане, и единственное, что я могу сделать для взаимодействия с ним, - это посылать ему сигналы с моего терминала (учитывая, что stdin все еще работает).
Однако после запуска процесса-демона я понял, что им можно управлять с помощью дополнительных средств (помимо сигналов), таких как запросы к ним с помощью флагов, как показано ниже (arch-way):
# /etc/rc.d/daemon-name {start|stop|restart|status|...}
Может кто-нибудь объяснить мне, встроена ли эта функция в общую "платформу демона" и применима ли она к каждому процессу демона как особая функция, или это просто условие, которое процессы, предназначенные для запуска в качестве демона, должны обрабатывать внутри себя?
И, чтобы добавить больше к этому вопросу, как же мы можем "управлять" демонами из терминала, используя их имя (т.е. остановку sambad), в то время как приложения всегда должны ссылаться, используя их имя (например, kill -9 12345)?
Заранее спасибо!
2 ответа
Если я правильно понимаю вопрос, когда вы используете sambad stop, он также упоминается по номеру PID, который хранится в каталоге /var/run/ (или другом, в зависимости от вашей системы). Файл создается, когда вы делаете start
,
Эта функция не встроена в этот демон. Если вы отредактируете /etc/rc.d/daemon-name, вы увидите, что это простой скрипт bash, который запускает процесс с указанными параметрами (аргументы могут быть определены в этом скрипте в Linux или в /etc/rc.conf в Unix). Вы можете написать свой собственный скрипт запуска и остановки имени демона.
В принципе:
- start запускает процесс из терминала (процесс автоматически знает, что он должен работать в фоновом режиме, иногда для него есть специальный аргумент, например -d),
- прекрати это делать
kill -9
cat /var/run/daemon.pid
, - перезапустите это делает
kill -HUP
cat /var/run/daemon.pid
, - статус он делает что-то вроде:
ps
cat /var/run/daemon.pid
,
Также существуют другие способы связи, чем отправка сигналов с использованием сокетов Unix. Например, вы можете контролировать процессы, отправив dbus
Сообщения. Увидеть: man dbus-send
Следующая команда выведет список всех ваших сокетов Unix:
netstat -lp --unix
Вы можете отфильтровать его по dbus:
netstat -lp --unix | grep -w dbus
Выполняя dbus-monitor
Вы можете увидеть, как разные процессы могут общаться друг с другом.
Вот пример отправки сообщения другому сервису:
dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListNames
Прочитайте несколько полезных статей:
Большая часть функциональности встроена не в демон, а в сценарии инициализации. В /etc/init.d/sambad
Там будет код для отслеживания PID, когда он запускается и сигнализировать, когда он должен остановиться. Сценарии инициализации, как правило, более специфичны для данного дистрибутива, чем для рассматриваемого демона, поскольку запуск системы и администрирование служб являются одной из основных областей, которую дистрибутивы Linux используют для различения.
Возможность перезагрузить файл конфигурации без уничтожения и повторного запуска демона - единственное из этих действий, для которого требуется значительное количество кода, написанного внутри самого демона.