当我的程序收到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);
}
答案 0 :(得分:3)
除非存在阻止您的硬限制,否则您可以使用setrlimit(RLIMIT_CORE, ...)
来增加softlimit并启用coredumps - 这相当于在shell中运行ulimit -c
。
答案 1 :(得分:1)
在Linux上,您通常可以这样做:
$ ulimit -c unlimited
当收到信号时,生成的核心文件将写入进程的当前工作目录。