当创建核心转储
问题描述:
例如调用exit(100)
将退出与状态100的应用程序,并调用raise(SIGABRT)
设置退出状态终止,状态134,同时创建一个核心转储的应用程序。但是,如果我想要状态为100的核心转储或任何其他任意值。我怎样才能做到这一点 ?我知道有触发核心转储几个信号,但他们似乎有固定的退出状态。当创建核心转储
答
貌似134
等于(128+6)
和euqals到((1<<7) | 6)
(其中#define SIGABRT 6
)
共发生?
+1
不是巧合,请参阅http://stackoverflow.com/questions/1101957/1104641#1104641和其他人。 – ephemient 2010-04-10 02:43:56
答
好吧,我想你可以fork()
,并有家长来电_exit(100)
,和孩子通话abort()
...
我的评论说,这是一个坏主意,但同意。
你为什么要这么做?关键在于能够判断是否退出核心竞争。大多数注意退出状态的程序应该区分零(成功)和非零(失败),但某些程序可能有兴趣知道在转储核心时它是否失败,在这种情况下,此特定的退出代码是有用的。并强制其他退出代码会欺骗依赖它的程序。 – 2010-04-09 13:50:21
是的,但这不适用于已发布的软件,仅用于内部调试才能更容易地对转储进行分类,而无需使用外部工具进行实际检查。 – Zitrax 2010-04-09 14:02:02