Longobard
написал 27 февраля 2004 года в 21:38 (1323 просмотра)
Ведет себя
как мужчина; открыл 291 тему в форуме, оставил 2499 комментариев на сайте.
Вопрос к UT: как в Insight отлаживать демонов? А то когда прога форкаецца и родитель делает exit (0); дебаггер с чистой вовестью заканчивает работу. Инит демона такой:
void daemon_init(const char * pname, int facility) {
int i;
pid_t pid;
if ((pid = fork()) != 0)
exit(0);
setsid();
signal(SIGHUP, SIG_IGN);
if ((pid = fork()) != 0)
exit(0);
daemon_proc = 1;
chdir("/");
umask(0);
for (i = 0; i < MAXFD; i++)
close(i);
openlog(pname, LOG_PID, facility);
}
Короче слизан подчитуюс со Стивенса (а нах изобретать велосипед :) ). Короче как мне дебажить потомка (демона)? А то делать постоянный флуд в логи уже запарило.
Последние комментарии
-
OlegL, 17 декабря 2023 года в 15:00 →
Перекличка
21
-
REDkiy, 8 июня 2023 года в 9:09 →
Как «замокать» файл для юниттеста в Python?
2
-
fhunter, 29 ноября 2022 года в 2:09 →
Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt?
6
-
Иванн, 9 апреля 2022 года в 8:31 →
Ассоциация РАСПО провела первое учредительное собрание
1
-
Kiri11.ADV1, 7 марта 2021 года в 12:01 →
Логи catalina.out в TomCat 9 в формате JSON
1
DevOps as a Service from Palark
24/7 SRE & DevOps service to cover all your Kubernetes needs.

Ну, вообще-то insight — это фронтэнд к gdb, так что вопрос туда. Что я вижу в Гугле, это вот это
http://www.linux.org/docs/ldp/howto/GCC-HOWTO/x501.html
и еще один не очень плохой совет не выходить в процессах, а отправлять их спать (sleep).
А вообще, не сталкивался… Может, кто другой знает?
Good Luck,
UT
А зачем мне оставлять родительский процесс живым, если он больше нечего делать не должен? Какой смысл?
Теперь по теме. Спасибо UT. Теперь для тех кто с английским не в ладах разобраться хочет:
Надо вставить breakpoint на fork(), затем сделать return 0 (родитель завершит работу) и дебважить потомка. Такой вот кусок кода приведен в доке в качестве примера:
(gdb) list 1 #include 2 3 main() 4 { 5 if(fork()==0) printf("child\n"); 6 else printf("parent\n"); 7 } (gdb) break fork Breakpoint 1 at 0x80003b8 (gdb) run Starting program: /home/dan/src/hello/./fork Breakpoint 1 at 0x400177c4 Breakpoint 1, 0x400177c4 in fork () (gdb) return 0 Make selected stack frame return now? (y or n) y #0 0x80004a8 in main () at fork.c:5 5 if(fork()==0) printf("child\n"); (gdb) next Single stepping until exit from function fork, which has no line number information. child 7 }а можно и просто на время этот форк забить ….
и будет у тебя без форка демон одназадачный :) Ну забивай. А может вообще на демона забить? Еще меньше гемора будет ;)