Longobard
			
				написал 27 февраля 2004 года в 21:38 (1327 просмотров)
			
			
			Ведет себя
			 как мужчина; открыл 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 OlegL, 17 декабря 2023 года в 15:00            →
        
        
            Перекличка
            21
-   REDkiy, 8 июня 2023 года в 9:09            →
        
        
            Как «замокать» файл для юниттеста в Python?
            2 REDkiy, 8 июня 2023 года в 9:09            →
        
        
            Как «замокать» файл для юниттеста в Python?
            2
-   fhunter, 29 ноября 2022 года в 2:09            →
        
        
            Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt?
            6 fhunter, 29 ноября 2022 года в 2:09            →
        
        
            Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt?
            6
-   Иванн, 9 апреля 2022 года в 8:31            →
        
        
            Ассоциация РАСПО провела первое учредительное собрание
            1 Иванн, 9 апреля 2022 года в 8:31            →
        
        
            Ассоциация РАСПО провела первое учредительное собрание
            1
-   Kiri11.ADV1, 7 марта 2021 года в 12:01            →
        
        
            Логи catalina.out в TomCat 9 в формате JSON
            1 Kiri11.ADV1, 7 марта 2021 года в 12:01            →
        
        
            Логи catalina.out в TomCat 9 в формате JSON
            1
 DevOps as a Service from Palark
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 }а можно и просто на время этот форк забить ….
и будет у тебя без форка демон одназадачный :) Ну забивай. А может вообще на демона забить? Еще меньше гемора будет ;)