Что касается этого отличного поста:

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 ответа2

1

Если я правильно понимаю вопрос, когда вы используете 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

Прочитайте несколько полезных статей:

1

Большая часть функциональности встроена не в демон, а в сценарии инициализации. В /etc/init.d/sambad будет код, который будет отслеживать PID при его запуске и сигнализировать о необходимости остановки. Сценарии инициализации, как правило, более специфичны для данного дистрибутива, чем для рассматриваемого демона, поскольку запуск системы и администрирование служб являются одной из основных областей, которую дистрибутивы Linux используют для различения.

Возможность перезагрузить файл конфигурации, не убивая и не перезапуская демон, - единственное из этих действий, для которого требуется значительное количество кода, написанного внутри самого демона.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .