The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"еще вопрос про daemon's и взаимодействие"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"еще вопрос про daemon's и взаимодействие"
Сообщение от vvk emailИскать по авторуВ закладки on 16-Янв-03, 11:18  (MSK)
спасибо за ответы на мой предыдущий вопрос. вот еще возникло.
есть я так понимаю много разных методов IPC.
мне надо вот что: daemon запущен, и крутиться себе там, выполняет свою работу. хочу сделать так, чтобы с командной строки я мог передать ему какую то команду ( начать работу, приостановить работу, задать параметры).
Пока есть идея написать программу, которая будет принимать параметр командной строки, и через IPC передавать daemon-у. Но я посмотрел некоторые виды IPC, и там получается, что для взаимодействия должен висеть цикл приема сообщений. но мне это не очень подходит, так как daemon должен иметь цикл для выполнения периодических операций.
Так вопросы такие:
1. какие виды IPC можно применить, чтобы не блокировать основной процесс
2. могу ли я использовать сигналы для взаимодействия с daemon-ом ?
3. как управляющая программа определит, какому daemon-у передавать данные.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "RE: еще вопрос про daemon's и взаимодействие"
Сообщение от Bob emailИскать по авторуВ закладки on 17-Янв-03, 01:05  (MSK)
Я уже делал похожую программу, поэтому давай опишу тебе кратко ее алгоритм. Надеюсь, это поможет тебе разобраться с проблемой.

Итак, у меня основной процесс запускает дочерний и тот становиться демоном:

...

pid=fork();
if (pid==0) {
setsid();
start_daemon();
exit(1);
}

...

Основной процесс сохраняет в отдельном файле pid потомка.

В функции start_daemon() перехватываются все сигналы и запускается на выполнение основной цикл. Его задача - непрерывное накопление и обработка данных (в моем случае это данные о сетевом трафике).
Для двух (SIGINT и SIGUSR1) определены новые обработчики.
При поступлении SIGINT демон завершает выполнение, по сигналу SIGUSR1 осуществляется считывание данных. Сама функция имеет приблизительно такой вид:

void start_daemon ()
{

/*Перехватываем сигналы*/
/*Запускаем бесконечный цикл*/

loop();

/*Сюда мы не попадем. Но нам сюда и не надо !*/
exit(0);
}

Теперь демон после запуска заходит в цикл и спокойно в нем работает до прихода сигнала SIGINT. Переменные, с которыми имеет дело цикл, определены как глобальные.

При запуске основного модуля в командной строке задается режим работы - старт демона, его остановка или считывание данных. Для режима "Старт" все понятно, только что его рассмотрели. Если задан режим остановки, считывается pid демона и ему посылается сигнал SIGINT:

kill(pid, SIGINT);

Сам обработчик этого сигнала прост до безобразия:

void stop_daemon() {
exit(1);
}
После этого выполнение демона завершается.

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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "RE: еще вопрос про daemon's и взаимодействие"
Сообщение от vvk emailИскать по авторуВ закладки on 18-Янв-03, 20:35  (MSK)
вот это да....
СПАСИБО ОГРОМНОЕ!

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

вот теперь с отловом кликов под иксами сделать и все будет пучком :)

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру