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, чтобы изменить каталог.

Другие вопросы по тегам