ubuntu Linux如何通过错误号获取错误描述

ovfsdjhp  于 2022-12-17  发布在  Linux
关注(0)|答案(3)|浏览(139)

在Linux中(特别是我有Ubuntu 14),如果某个程序因错误而终止,我可以通过$?变量获得数值错误代码

$ ./failing_app
$ echo $?

然而,数字本身并不能告诉我太多,我如何获得错误名称和描述?
$ man errno中有一个错误列表,但它只给出了名称,没有给出数值。
我在谷歌上搜索了一下,结果很奇怪:例如,我有一个玩具 rust 程序,我试图访问数组元素超出界限。程序死机和$?101,但它被认为是对应于Network unreachable错误,这没有任何意义。

yeotifhr

yeotifhr1#

程序的退出状态(shell中的$?)与C errno无关。
在C程序中,退出状态通常来自exit的参数或main的返回值,约定为0表示成功退出(或shell为true),其他值表示失败(或为false)。
但是,如果程序因接收信号而死亡,shell会将$?设置为128加上信号编号,例如,在分段错误(SIGSEGV,即11)时,$?将为139。
为了列出信号编号,我运行kill -l

gzszwxb4

gzszwxb42#

没有一个统一的定义权威。每个程序给错误代码分配自己的语义。好的程序在手册页有文档;例如参见GNU的grepxargs手册页。
exit(3) Linux手册页还指出,“BSD已尝试标准化退出代码”。BSD sysexits (3) manual page实际上是很好的推荐阅读,但正如所指出的,对于有限数量的错误场景来说,几乎不是一个推动。
内核有一组详细得多且文档化得很好的可能错误及其原因,但这显然仅限于系统调用,根本不解决应用程序级错误。
Advanced Bash Scripting Guide有一个关于通用约定的章节--但是就像ABS一般一样,它是标准、约定、作者个人观点、猜测和谎言的邪恶混合体(表中没有一个退出代码是“保留的”,尽管它是这么说的,并且引用该表的文本强调了这个不正确的事实)。

qfe3c7zg

qfe3c7zg3#

此链接提供了一个错误的数字列表。希望这是你正在寻找的。http://www.thegeekstuff.com/2010/10/linux-error-codes/
此外,在我的系统上,我看到文件/usr/include/asm-generic/errno-base.h有错误的定义以及错误编号。这将是一个更好的参考比链接。

相关问题