在 macOS 中,我发现在某些情况下 SIGABRT 不会生成核心转储文件。
例如,在一个终端中运行 sleep 命令:
在另一个终端中向其发送 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中确实生成了核心转储文件。
Darwin Kernel Version 16.7.0: Wed Apr 24 20:50:53 PDT 2019; root:xnu-3789.73.49~1/RELEASE_X86_64
(Sierra)上运行。 - mevetsman core
有什么启示吗?我有点惊讶,我必须以root身份运行它才能生成核心文件。 - mevets