Unix 历史:返回代码八进制?

Unix 历史:返回代码八进制?

今天让我措手不及的是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,并且有一个常见“状态”值列表(也可能以八进制给出)。

所以这是一个穷人的错误消息。

相关内容