在MacOS上,SIGABRT不会生成核心转储文件

4
在 macOS 中,我发现在某些情况下 SIGABRT 不会生成核心转储文件。
例如,在一个终端中运行 sleep 命令:
lianxin.wlx@mbp [01:08:21] [~/test]
-> % sleep 1000

在另一个终端中向其发送 SIGABRT 信号:
lianxin.wlx@mbp [01:08:59] [~]
-> % ps -ef | grep sleep
  502 47679 20388   0  1:08AM ttys001    0:00.01 sleep 1000
lianxin.wlx@mbp [01:09:03] [~]
-> % kill -6 47679

之后睡眠进程被中止,但不会生成核心转储。

lianxin.wlx@mbp [01:08:21] [~/test]
-> % sleep 1000
[1]    47679 abort      sleep 1000
lianxin.wlx@mbp [01:10:35] [~/test]
-> % ls /cores
lianxin.wlx@mbp [01:10:37] [~/test]
-> %

那为什么呢?我在 Linux 中测试了相同的操作,它确实生成了核心转储。

我确定我已经正确打开了核心转储(使用ulimit -c unlimited命令,而且/cores文件夹的权限为777)。我编写了一个会因为SIGSEGV而崩溃的程序,在/cores中确实生成了核心转储文件。

1个回答

0

如果你制作一个简单的程序,

main() {
    abort();
}

如果以适当的权限运行,它将生成核心转储。此外,如果您进行以下操作:

main() {
    sleep(100);
}

在后台运行并使用kill -ABRT命令,它会生成一个core dump文件。但是/bin/sleep却没有,这有点奇怪。

这是假设您已经按照man core中的方法进行操作。


我尝试了第二个程序,它不会生成核心转储文件。而第一个程序会生成。 - Lixin Wei
它在我的Darwin Kernel Version 16.7.0: Wed Apr 24 20:50:53 PDT 2019; root:xnu-3789.73.49~1/RELEASE_X86_64 (Sierra)上运行。 - mevets
我的操作系统是 Darwin 20.6.0,MacOS BigSur 11.6 (20G165)。也许与系统版本有关? - Lixin Wei
你的系统上执行man core有什么启示吗?我有点惊讶,我必须以root身份运行它才能生成核心文件。 - mevets

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接