今天让我措手不及的是gdb
:
Program exited with code 0146.
gdb
打印返回代码八进制;调查原因我发现:
http://comments.gmane.org/gmane.comp.gdb.devel/30363
但这并不是一个特别令人满意的答案。一些快速的谷歌搜索并没有揭示历史,所以我希望有人可能知道背后的故事。
一个有点相关的问题,如何查看八进制的返回码?也许旧机器总是打印返回码?
$ printf %o\\n $?
实在是太尴尬了:)
答案1
八进制表示形式简化了对最常用的小值的退出代码的解释。如果这个数字(一个字节)以十进制打印,则查找哪个信号中断了进程将需要一些计算,而在八进制中,它们可以按原样读取:
- 进程以状态 5 退出,
gdb
显示05
没有区别 - 进程退出是因为它有一个
SIGINT
( Control+ C),gdb
显示的0202
信号 #2 比 更容易被识别130
。
此外,退出状态也可能是位掩码,在这种情况下,八进制(至少当您习惯它时,几十年前比现在更常见)比十进制甚至更容易在心理上转换为位十六进制,就像chmod
仍然接受八进制数来表示文件权限一样:0750 = 111 101 000 = rwx r-x ---
。
答案2
我没有这篇文章的副本,只是阅读了谷歌图书上的简短简介。根据 X/Open 可移植性指南 System V Specific Commands & Utilities pg 283(根据 google books)
如果应用程序异常终止,其退出状态为八进制 0200 + status,并且有一个常见“状态”值列表(也可能以八进制给出)。
所以这是一个穷人的错误消息。