为什么core dump文件只在ubuntu的特定目录下生成



我编写了一个示例c程序来生成核心转储。但是,只有在特定的目录/var/crash中执行时才会生成核心转储,而在其他目录中执行时则不会生成。为什么?我正在使用ubuntu-20。

当我运行程序在/var/crash

/var/crash>./a.out 
Caught signal 11, generating core dump...
Aborted (core dumped)
/var/crash>ls /var/crash
_var_crash_a.out.1000.crash  a.out
/var/crash>

当我运行在我的主目录没有核心文件生成

/home/ubuntu>./a.out 
Caught signal 11, generating core dump...
Aborted (core dumped)
/home/ubuntu>
/home/ubuntu>ls
a.out                           ----> no core dump file generated
/home/ubuntu>

ulimit价值

/home/ubuntu>ulimit -c unlimited

my core dump generator code

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
void crash_handler(int sig) {
printf("Caught signal %d, generating core dump...n", sig);
fflush(stdout);
abort();
}
int main() {
struct sigaction sa;
sa.sa_handler = crash_handler;
sigemptyset(&sa.sa_mask);
sa.sa_flags = SA_RESTART;
if (sigaction(SIGSEGV, &sa, NULL) == -1) {
perror("sigaction");
exit(1);
}
int* p = NULL;
*p = 42;
return 0;
}

核心模式输出

/home/ubuntu>cat /proc/sys/kernel/core_pattern
|/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E
/home/ubuntu>

没有生成核心转储文件

您可能搞错了——消息说生成了core

它只是没有在当前目录中生成,因为/proc/sys/kernel/core_pattern,正如其他评论者所提到的。