service — прерывает работающую программу на c ++ из другой программы или терминала

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

Я хочу общаться с этим запущенным демоном извне программы (например, консоли или другой программы).

Я читаю о обработка сигналов в с ++ и, видимо, есть некоторые предопределенные сигналы. Есть ли способ отправить собственный сигнал запущенной программе?

0

Решение

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

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

Самый простой способ позволить внешнему процессу взаимодействовать с процессом-демоном, это предоставить ему файл конфигурации и позволить демону наблюдать за изменениями, используя inotify() интерфейс.

Эта техника уже используется многими системными демонами.

2

Другие решения

Ты можешь использовать kill(pid, signal) из одного процесса отправить сигнал другому. Отправка SIGKILL насильственно и мгновенно прекратит ваш процесс.

Сигналы ограничены тем, что они выражают, и вы можете узнать это, обратившись к странице 7 руководства по сигналам. Некоторые сигналы можно игнорировать / обрабатывать / блокировать, а другие нет.

Если вы хотите истинного настраиваемого межпроцессного взаимодействия, вы должны использовать каналы или даже сокеты (плохая практика). Таким образом, вам придется определить свой собственный протокол, и вы можете сделать гораздо больше, чем с сигналами.

Вот учебник о том, как использовать именованные каналы для отправки данных запущенным процессам: http://www.linuxjournal.com/content/using-named-pipes-fifos-bash.

1

По вопросам рекламы [email protected]