Сбросить ядро, если SIGSEGV (в C)? - PullRequest
2 голосов
/ 12 марта 2011

Как я могу сбросить ядро, когда моя программа получает сигнал SIGSEGV? (Сервер, на котором запущена моя программа, имеет очень ограниченные разрешения, и поэтому дамп ядра по умолчанию отключен.)

Я написал следующее, используя gcore, но вместо этого я хотел бы использовать функции C. Можно ли как-нибудь поймать ядро ​​и записать его в папку где-нибудь?


void segfaulthandler(int parameter)
{
    char gcore[50];
    sprintf(gcore, "gcore -s -c \"core\" %u", getpid());
    system(gcore);

    exit(1);
}

int main(void)
{
    signal(SIGSEGV, segfaulthandler);
}

Ответы [ 2 ]

3 голосов
/ 12 марта 2011

Если нет жесткого ограничения, мешающего вам, вы можете использовать setrlimit(RLIMIT_CORE, ...), чтобы увеличить программный предел и включить coredumps - это соответствует запуску ulimit -c в оболочке.

1 голос
/ 12 марта 2011

В Linux вы обычно можете выполнить:

$ ulimit -c unlimited

Полученный файл ядра будет записан в текущем рабочем каталоге процесса при получении сигнала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...