The OpenNET Project / Index page

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

пример написания простого демона. (daemon example signal)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: daemon, example, signal,  (найти похожие документы)
Date: Tue, 3 Apr 2001 01:33:50 +0000 (UTC) From: "Alexander V. Ribchansky" <triosoft@bereg.uzhgorod.ua> Newsgroups: fido7.ru.unix.prog Subject: пример написания простого демона. Привет, Виталик! Ниже приводится простенький демон, который при старте пишет в лог-файл что он стартовал и текущее время, а когда его убивают сигналом SIGINT или SIGQUIT или SIGTERM, то он в тот же лог-файл пишет, что он пришиблен и пишет текущее время.. #include <unistd.h> #include <stdio.h> #include <syslog.h> #include <signal.h> #include <time.h> /*Здесь идет собственно тело демона, в моем случае программа приостанавливает свою работу до получения какого-то сигнала*/ inline void do_packet_loop() { while(1) pause(); } /*здесь идет обработчик сигнала, тоесть когда программа получит сигнал, то он будет именно здесь обрабатываться*/ void fsignal(int sig) { switch(sig) { case SIGTERM: case SIGINT: case SIGQUIT: time_t ti_mv; tm *local_tim; local_tim = localtime(&ti_mv); syslog(LOG_NOTICE,"DAEMON_TST daemon stopped on signal\ %d at %s",sig,asctime(local_tim)); closelog(); exit(0); break; default: syslog(LOG_NOTICE,"got signal %d. ignore...",sig); break; } } int main(int argc,char** argv) { setgid(65534);/*в целях безопасности меняем UID и GID процесса*/ setuid(65534); chdir("/");/*переходим на рут, чтоб не блокировать файловые системы*/ fclose(stdin);/*так как демон ничего не собирается выводить на экран, то закрываем stdout, stdin, stderr*/ fclose(stdout); fclose(stderr); if(fork())/*форкаемся*/ exit(0); setsid();/*отрываемся от управляющего терминала и переходим в фоновый режим*/ for(int j=1; j<32; j++)/*настраиваем обработчиком всех сигналов функцию fsignal*/ signal(j,fsignal); time_t timv; struct tm *local_tm = localtime(&timv); syslog(LOG_NOTICE,"DAEMON_TST daemon started at %s ",asctime(local_tm)); do_packet_loop();/*демонизируемся.. Ж-)*/ } Коль чего не ясно -- пиши, постараюсь объяснить. ЗЫ. то АЛЛ Критику по поводу примера с удовольствием принимаю! ЗЫЫ. Сия прога написана на основе статьйи Oleg'a RooT in ru.unix.bsd, за что автору большое спасибо! ______________________ С уважением, Александр Рыбчанский системный администратор узлов bereg.uzhgorod.ua & triosoft.com.ua

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ RSS ]
  • 1, Юра (??), 10:07, 28/07/2004 [ответить]  
  • +/
    Здравствуйте, спасибо Вам за такой пример.
    У меня есть к Вам несколько вопросов:
    1) Если взять за основу написания демона, Вашу программу, подскажите пожалуйста, после каких строк можно вставить свой код?
    2) Где и как, нужно прописывать свой демон?
    Заранее спасибо. С уважением Юра Злотников
     
  • 2, Leon (??), 22:57, 06/12/2005 [ответить]  
  • +/
    а как насчет вызова daemon()? разве он делает не то же самое, что и строки от
       chdir("/");
    до
       setsid();
     
  • 3, visor (??), 14:32, 20/10/2010 [ответить]  
  • +/
    Функции daemon() нет в стандарте POSIX.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




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

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