Linux如何通过错误号得到错误描述

在Linux(特别是我有Ubuntu 14),如果一些程序终止与错误,我可以通过$?获得数值错误代码$? variables

 $ ./failing_app $ echo $? 

然而,这个号码本身并没有告诉我多less,我怎么得到错误的名称和描述?

$ man errno有一个错误列表,但它只给出名称,而不是数字值。

我search谷歌和结果是相当奇怪的:例如我有一个玩具锈病程序,我试图访问数组元素越界。 程序恐慌和$?101 ,但是据说对应于Network unreachable错误,这没有任何意义。

程序的退出状态(shell中的$? )与C errno无关。

在C程序中,通常退出状态来自退出的参数或main的返回值。 约定是0表示成功退出(对于shell而言是true),其他值是失败(ir false)。

但是,如果一个程序因接收到信号而死亡,shell会设置$? 到128加上信号编号。 例如,在分段错误( SIGSEGV ,即11)上, $? 将是139。

要列出信号编号,我运行kill -l

没有单一的中央定义权威。 每个程序都将自己的语义分配给错误代码。 好的在手册页面有文档; 例如,请参阅例如GNU的grepxargs手册页。

退出(3) Linux手册页面也注意到“BSD试图标准化退出代码”。 BSD sysexits (3)手册页实际上是一个很好的推荐阅读,所示的总线,几乎不会超过有限数量的错误情况。

内核有一个更详细和详细的记录可能的错误及其原因,但这显然限于系统调用,并没有解决应用程序级错误。 对于Linux,请参阅errno(3)手册页。

高级Bash脚本指南有一个关于公共约定的部分; http://tldp.org/LDP/abs/html/exitcodes.html#EXITCODESREF–但是就像一般的ABS一样,它是标准,惯例,作者的个人观点,猜测和谎言的邪恶组合。 (表中的退出代码都不是“保留的”,尽管它是这样说的,引用表的文本强调了这个不正确的事实)。

这个链接提供了数字错误的列表。 希望这是你在找什么。 http://www.thegeekstuff.com/2010/10/linux-error-codes/

此外,在我的系统上,我看到文件/usr/include/asm-generic/errno-base.h有错误的定义以及错误号码。 这将是比链接更好的参考。