SIGABRT 不会在 MacOS 中生成核心转储



在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中生成了一个核心转储。

如果你编写一个简单的程序,

main() {
abort();
}

如果使用适当的priv运行,它将生成一个核心转储。另外,如果你输入:

main() {
sleep(100);
}

在后台运行它并杀死-ABRT,它将生成一个核心转储。但是/bin/sleep没有,这有点奇怪。

这是假设你已经遵循了man core中的配方。

相关内容

  • 没有找到相关文章

最新更新