如果SIGSEGV(在C中)转储核心?

时间:2011-03-11 23:01:39

标签: c linux

当我的程序收到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 个答案:

答案 0 :(得分:3)

除非存在阻止您的硬限制,否则您可以使用setrlimit(RLIMIT_CORE, ...)来增加softlimit并启用coredumps - 这相当于在shell中运行ulimit -c

答案 1 :(得分:1)

在Linux上,您通常可以这样做:

$ ulimit -c unlimited

当收到信号时,生成的核心文件将写入进程的当前工作目录。