setsid() после fork() не может генерировать дамп ядра
Для запуска программы я написал оболочку:
#!/bin/bash
ulimit -c unlimited
ulimit -n 65535
/usr/local/bin/myprogram -D #-D here means run in daemon
Когда я запускаю команду: kill -3 pid. Он не будет генерировать файл дампа ядра. После того, как я удалю "-D" из оболочки (примечание: программа не будет запускаться в демоне) и выполню команду "kill -3 pid", она сгенерирует дамп ядра.
Я думаю, это может быть вызвано идентификатором терминала.
Как мне сделать для генерации дамп ядра с запуском в демоне?
Код вилки:
void Daemonize()
{
pid_t pid, sid;
pid = fork();
if (pid < 0)
{
//Fork error
exit(EXIT_FAILURE);
}
else if (pid == 0)
{
//Child
char *daemondir;
umask(027);
sid = setsid();//it's this cause that can't generate core dump
if (sid < 0)
exit(EXIT_FAILURE);
dosomething();
...
}
//Parent exits
exit(EXIT_SUCCESS);
}
1 ответ
setsid не означает, что дамп ядра не генерируется.
Я проверяю ваш код на ядре среды 3.10 x86_64. В моей среде он всегда генерирует дамп ядра в текущем каталоге.
Проверьте каталог, где генерируется дамп ядра.
Вам может потребоваться изменить [/proc/sys/kernel/]core_pattern, чтобы изменить каталог.