![]() |
Модераторы: xvr |
![]() ![]() ![]() |
|
Elyad |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 2.8.2006 Репутация: нет Всего: нет |
Следующая программа делает процесс - демоном, и записывает в log-фаил некоторые сообщения.
В файле я прописал, что все сообщения локального уровня LOG_LOCAL2 будут записываться в фаил /var/log/dem.log. Проблема заключается в том, что когда я запускаю впервый раз, процесс записывает все в нужный log-фаил, но при последующих запусках уже никаких записей не делается. В чем же дело? void demon(const char *name) { int i; pid_t pid; if ((pid=fork()) < 0) perror("demon "); else if (pid > 0) exit(0); setsid(); signal(SIGHUP,SIG_IGN); if ((pid=fork()) < 0) perror("demon 2"); else if (pid > 0) exit(0); chdir("/"); umask(0); } int main(int argc, char **argv) { demon(argv[0]); syslog(LOG_LOCAL2|LOG_INFO,"hello1"); syslog(LOG_LOCAL2|LOG_INFO,"hello2"); return 0; } |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
Elyad
проблема тут
Это сообщение отредактировал(а) MAKCim - 24.10.2006, 17:13 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
Elyad |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 2.8.2006 Репутация: нет Всего: нет |
Хочу разъяснить всем этот код
void demon(const char *name) { int i; pid_t pid; if ((pid=fork()) < 0) perror("demon "); else if (pid > 0) exit(0); // завершение работы родительского процесса //первый дочерний процесс продолжает работу setsid(); // становится главным в сеансе // второй дочерний процесс продолжает работу //НАЗНАЧЕНИЕ второй функции fork - гарантировать, что демон не сможет // автоматически получить управляющий терминал, если потом он откроет устройство терминала. signal(SIGHUP,SIG_IGN); if ((pid=fork()) < 0) perror("demon 2"); else if (pid > 0) exit(0); // изменение рабочего каталога chdir("/"); umask(0); } И напоследок: протестировав эту прогу на FreeBSD оказалось, что все работает нормально и никаких проблем с демоном не возникает. ![]() Но при тестировании на Linux - проблема выше описанная... ![]() |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
setsid - создает новую сессию, новую группу процессов с одним процессов в этой группе - лидером группы процессов, отключается. Этот сеанс не будет иметь управляющего терминала Каким образом связан fork с гарантией невозможности получить управляющий терминал?? -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
Elyad |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 2.8.2006 Репутация: нет Всего: нет |
Не будем спорить по поводу моего демона, которым я уже пользуюсь год. Проблема то заключается в ом, что под FreeBSD код работает, а под Linux - НЕТ!!!
![]() |
|||
|
||||
Бонифаций |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 827 Регистрация: 15.9.2005 Где: Brisbane Репутация: 1 Всего: 40 |
в линуксе в unistd.h есть специальная функция int daemon(int nochdir, int noclose); которая и делает процесс демоном.
-------------------- Бонифаций. |
|||
|
||||
Elyad |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 2.8.2006 Репутация: нет Всего: нет |
Я хочу, чтобы прога работала и под Linux и под FreeBSD.
![]() |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 16 Всего: 196 |
условную компиляцию еще никто не отменял.
![]() |
|||
|
||||
Бонифаций |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 827 Регистрация: 15.9.2005 Где: Brisbane Репутация: 1 Всего: 40 |
судя по манам freebsd она присутсвует и там. В stdlib HISTORY The daemon (); function first appeared in BSD 4.4 -------------------- Бонифаций. |
|||
|
||||
Elyad |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 2.8.2006 Репутация: нет Всего: нет |
Я все же хочу использовать своего демона и понять где именно в моей функции проблемы. Иведь под FreeBSD все работает нормально!!!
![]() |
|||
|
||||
Бонифаций |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 827 Регистрация: 15.9.2005 Где: Brisbane Репутация: 1 Всего: 40 |
Странно все это. Я попробовал странслировать у себя на линуксе ваш код и 3 раза запустить. Каждый раз отработался нормально:
Oct 26 16:31:39 walrus-desktop test: hello1 Oct 26 16:31:39 walrus-desktop test: hello2 Oct 26 16:32:07 walrus-desktop test: hello1 Oct 26 16:32:07 walrus-desktop test: hello2 Oct 26 16:32:21 walrus-desktop test: hello1 Oct 26 16:32:21 walrus-desktop test: hello2 у меня gcc version 4.0.3 , Ubuntu 6.06. Это сообщение отредактировал(а) Бонифаций - 26.10.2006, 15:37 -------------------- Бонифаций. |
|||
|
||||
Elyad |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 2.8.2006 Репутация: нет Всего: нет |
Спасибо за проявленный интерес к моей теме. Бонифаций, не подскажите ли вы мне какую же все таки функцию - моего демона или daemon использовать???
![]() |
|||
|
||||
Бонифаций |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 827 Регистрация: 15.9.2005 Где: Brisbane Репутация: 1 Всего: 40 |
я обычно daemon использую. попробуйте и Вы. тем более что там переделок совсем мало получится.
-------------------- Бонифаций. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Программирование под Unix/Linux" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |