Я разрабатываю приложение с различным поведением в зависимости от аргументов:
Я уже знаю, как использовать fork / system / exec и т.д ...
Но я хотел бы знать основную логику такого приложения:
Я читал, что убить демона, чтобы перезапустить его, не является чистым способом.
Как работают другие приложения? (Ubuntuone, прогноз погоды, RSS-канал работает с областью уведомлений)
Спасибо за вашу помощь.
PS: я не хочу создавать общесистемный демон, просто пользовательское приложение с фоновым процессом.
Вы касаетесь здесь океана информации. Эта проблема называется межпроцессным взаимодействием (IPC), и существует множество материалов по этому вопросу, в зависимости от языка программирования, сложности и т. Д. Она варьируется от обмена данными по файлам (наличие или отсутствие файла блокировки - простой вариант это) через именованные каналы к Sys V IPC, включая семафоры и разделяемую память.
В твоем случае я бы посмотрел на именованные каналы.
Общим способом общения с демоном в современном настольном компьютере GNU / Linux является D-Bus . Чтобы существенно упростить то, что он делает: D-Bus позволяет вызывать функции из процесса «обслуживания» демона. Вы можете легко получить функцию refreshConfig()
, которая перезагружает конфигурацию из файла при вызове.
Тем не менее, конкретная вещь, которую вы пытаетесь сделать, имеет более подходящее решение для Ubuntu и GTK +. С помощью GSettings вы создаете схему конфигурации, которая определяет пары ключ / значение, которые вы хотите хранить. Сделав это, вы можете поместить строку примерно в этот демон ...
mySettings->connect("changed::setting", onSettingChanged);
И GObject разбудит вашего демона и вызовет onSettingChanged()
при изменении конфигурации. Эта функция может вызывать новый экземпляр себя и exit(0)
, если хотите. Хотя я не могу придумать причину кодовой логики, почему вам нужно это сделать.
Вот отличное руководство по использованию GSettings с Python . Он должен быть легко переведен на C ++.