Различия управления процессами демона

в отношении этого отличного поста:

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|...}

может ли кто-нибудь объяснить мне, если эта функция встроена в общую "daemon framework" и применяется к каждому процессу демона как специальная функция или это просто условие, которое процессы, предназначенные для запуска в качестве демона, должны обрабатывать внутренне?

и чтобы добавить больше к этому вопросу, как мы можем "контролировать" демонов из терминала, используя их имя (т. е. sambad stop), в то время как приложения всегда должны быть переданы с их именем (т. е. kill -9 12345)?

спасибо заранее!

5
задан Community
источник

2 ответов

если я правильно понял вопрос, когда вы используете sambad stop, он также упоминается номером PID, который хранится в каталоге /var/run/ (или другом в зависимости от вашей системы). Файл создается при выполнении start.

эта функция не встроена в этот deamon. Если вы редактируете /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

можно фильтровать по ДГУ на:

netstat -lp --unix | grep -w dbus

выполняя dbus-monitor вы можете увидеть, как различные процессы могут взаимодействовать друг с другие.

вот пример отправки сообщения на другие услуги:

dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListNames

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

1
отвечен kenorb 2017-04-13 12:22:58
источник

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

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

1
отвечен Alan Curry 2012-07-29 02:16:43
источник

Другие вопросы bash daemon linux process unix