Я написал программу на C ++, которая имеет бесконечный цикл. Я хочу запустить эту программу как демон (или же оказание услуг) в Linux.
Я хочу общаться с этим запущенным демоном извне программы (например, консоли или другой программы).
Я читаю о обработка сигналов в с ++ и, видимо, есть некоторые предопределенные сигналы. Есть ли способ отправить собственный сигнал запущенной программе?
Скорее всего, сигналы — это не то, что вы действительно хотите связать с процессом демона, если только вы не хотите завершить его определенным образом.
Также нет, вы не можете определить свои собственные произвольные номера сигналов, поскольку операционной системе необходимо знать, как они отправляются в процесс. Как уже упоминалось в моем комментарии, есть SIGUSR1
а также SIGUSR2
были предназначены для пользовательских целей сигнализации.
Самый простой способ позволить внешнему процессу взаимодействовать с процессом-демоном, это предоставить ему файл конфигурации и позволить демону наблюдать за изменениями, используя inotify()
интерфейс.
Эта техника уже используется многими системными демонами.
Ты можешь использовать kill(pid, signal)
из одного процесса отправить сигнал другому. Отправка SIGKILL насильственно и мгновенно прекратит ваш процесс.
Сигналы ограничены тем, что они выражают, и вы можете узнать это, обратившись к странице 7 руководства по сигналам. Некоторые сигналы можно игнорировать / обрабатывать / блокировать, а другие нет.
Если вы хотите истинного настраиваемого межпроцессного взаимодействия, вы должны использовать каналы или даже сокеты (плохая практика). Таким образом, вам придется определить свой собственный протокол, и вы можете сделать гораздо больше, чем с сигналами.
Вот учебник о том, как использовать именованные каналы для отправки данных запущенным процессам: http://www.linuxjournal.com/content/using-named-pipes-fifos-bash.