|
|
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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/657709b846bb.html, оценка из 5, голосов 10
|