创建核心转储时设置退出状态

Posted

技术标签:

【中文标题】创建核心转储时设置退出状态【英文标题】:Setting exit status when creating core dump 【发布时间】:2010-04-09 13:38:34 【问题描述】:

例如,调用exit(100) 会以状态100 退出应用程序,调用raise(SIGABRT) 会在创建核心转储时以状态134 中止应用程序。但是,如果我想要状态为 100 或任何其他任意值的核心转储怎么办。我怎样才能做到这一点 ?我知道有几个信号会触发核心转储,但它们似乎具有固定的退出状态。

【问题讨论】:

你为什么要这样做?关键是要能够判断它是否以倾销核心退出。大多数关注退出状态的程序应该只区分零(成功)和非零(失败),但有些程序可能想知道它在转储核心时是否失败,在这种情况下,这个特定的退出代码很有用。 . 并强制执行一些其他退出代码会欺骗依赖它的程序。 是的,但这不适用于已发布的软件,仅用于内部调试,以便能够更轻松地对转储进行分类,而无需使用外部工具实际检查它。 【参考方案1】:

看起来134 等于(128+6) 和euqals 等于((1<<7) | 6)(其中#define SIGABRT 6) 巧合?

【讨论】:

并非巧合,请参阅***.com/questions/1101957/1104641#1104641 和其他人。【参考方案2】:

好吧,我想你可以fork() 让父母打电话给_exit(100),让孩子打电话给abort()...

我同意 cmets 的说法,但这是个坏主意。

【讨论】:

以上是关于创建核心转储时设置退出状态的主要内容,如果未能解决你的问题,请参考以下文章

libc 退出调用中的核心转储

进程的控制

如何获取已向已退出转储核心的另一个进程发送 SIGABRT 信号的进程的 pid

在运行模式下启用 Qt Creator 创建核心文件?

SonarQube 以 143 退出

Sun JDK 能否在 JVM 崩溃时生成核心/堆转储文件?