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

标签 c++ linux macos operating-system coredump

在 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/

相关文章:

objective-c - 如何禁止 Cocoa 应用程序中的所有日志记录?

c++ - Qt 多页 TIFF

c++ - 是否可以编写一个自定义的 STL 分配器,它使用指向用户提供的分配函数的指针?

c++ - 在 QtCreator 中链接 SDL2

c++ - Qt安装程序框架mac桌面别名

linux - 为什么 bash 在通过 unshare 运行时无法 fork 任何进程?

c++ - 无法从mysql读取结果

c++ - 打印任何 STL 容器

sql - 在 Redshift 中使用 json_extract_path_text 时如何跳过错误?

linux - 777权限无法删除目录