Главная страница


ru.linux

 
 - RU.LINUX ---------------------------------------------------------------------
 From : Andrey Sapozhnikov                   2:5020/400     12 Mar 2003  20:30:32
 To : Alexandr S. Agranovsky
 Subject : Re: написать демона
 -------------------------------------------------------------------------------- 
 
 Alexandr S. Agranovsky wrote:
 
 > 
 >   Hi, Max Sivkov
 > 
 > MS> привет
 > MS> ну еще не мешало бы от консоли его отрубить
 > MS>    if (freopen("/dev/null", "r", stdin) == NULL) {
 > MS> file://bug
 > MS>     }
 > MS>     if (freopen("/dev/null", "w", stdout) == NULL) {
 > MS> file://bug
 > 
 > MS>     }
 > MS>     if (freopen("/dev/null", "w", stderr) == NULL) {
 > MS> file://bug
 > 
 > MS>     }
 > 
 > А если у нас третий-четвертый-пятый дескриптор остался от
 > предыдущего процесса?
 
 Раз остался, значит должен был остаться. freopen-у это не
 помешает.
 
 > Вот полный текст минимально корректной демонизации:
 > 
 >     signal(SIGTTOU, SIG_IGN);       /* ignore terminal i/o signals */
 >     signal(SIGTTIN, SIG_IGN);
 >     signal(SIGTSTP, SIG_IGN);
 
 А нахрена блокировать терминальные сигналы если терминалов у
 нас теперь не будет?
 
 >     if (fork()!=0) exit(0); /* daemonization */
 
 А проверить код возврата на -1 ?
 
 >     setsid();
 
 Для "корректного" случая надо бы еще и setpgrp.
 
 >     getrlimit(RLIMIT_NOFILE, &flim); /* close all files */
 >     for (fd=0; fd<flim.rlim_max; fd++) /* maybe 16 will be enough? */
 >       close(fd);
 
 Это на случай если мы сами не знаем чего наоткрывали на данный
 момент? Бывают и нужные открытые файлы.
 
 >     chdir("/");
 > // при желании chdir("/tmp"); /* for some safety, do not remove the call above
 > - if we don't have the /tmp directory? ;) */
 
 А это сильно зависит от функциональности демона. Возможно
 лучшим вариантом будет переход в какой-нибудь /var/www
 или каталог в котором можно оставить core если не исключен
 такой вариант развития событий.
 
 >     open("/dev/null", O_NOCTTY | O_NONBLOCK | O_RDONLY);
 >     open("/dev/null", O_NOCTTY | O_NONBLOCK | O_WRONLY);
 
 Для не-терминала  O_NOCTTY бессмысленен, опять же. O_NONBLOCK
 применительно к /dev/null тоже.
 
 >     dup(1);
 
 В 99% случаев этого достаточно. Hо лучше все же открыть
 stderr отдельно. Hапример, чтобы избежать побочных эффектов
 при flock.
 
 > 
 > ---
 > Alexandr S. Agranovsky llb@udmnet.ru
 
 -- 
 Андрей Сапожников
 
 --- ifmail v.2.15dev5
  * Origin: Demos online service (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 написать демона   Andrew V Scherbacov   11 Mar 2003 15:17:05 
 написать демона   Mishael Sibiryakov   11 Mar 2003 17:33:47 
 Re: написать демона   Alexandr S. Agranovsky   11 Mar 2003 17:14:25 
 написать демона   Mishael Sibiryakov   11 Mar 2003 21:12:02 
 Re: написать демона   Dmitri A. Martynoff   11 Mar 2003 19:49:41 
 написать демона   Mishael Sibiryakov   11 Mar 2003 23:06:33 
 написать демона   Andrew V Scherbacov   12 Mar 2003 12:46:14 
 написать демона   Mishael Sibiryakov   12 Mar 2003 12:31:08 
 написать демона   Serguei Khvatov   12 Mar 2003 13:52:33 
 Re: написать демона   Nick Gazaloff   12 Mar 2003 15:28:22 
 написать демона   Serguei Khvatov   12 Mar 2003 14:01:58 
 Re: написать демона   Alexandr S. Agranovsky   12 Mar 2003 19:39:34 
 Re: написать демона   Max Sivkov   12 Mar 2003 18:47:26 
 Re: Re: написать демона   Alexandr S. Agranovsky   12 Mar 2003 19:53:53 
 Re: написать демона   Andrey Sapozhnikov   12 Mar 2003 20:30:32 
 написать демона   ilya voronin   13 Mar 2003 05:48:20 
Архивное /ru.linux/657709b846bb.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional