在 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
然后 sleep 过程中止,但不会生成核心转储。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();
}
如果以适当的权限运行,它将生成核心转储。另外,如果你做一个:
main() {
sleep(100);
}
在后台运行它并杀死 -ABRT ,它将生成一个核心转储。但是/bin/sleep 没有,这有点奇怪。
这是假设您遵循了
man core
中的配方.
关于c++ - SIGABRT 不会在 MacOS 中生成核心转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69680832/