Linux中的标准退出状态代码
1. 概述
在 Linux 中,当进程终止时,它会返回一个退出代码。成功执行后,此代码等于零。任何非零退出代码都表示发生了某些错误。
尽管我们可以自由选择在脚本和程序中使用的退出代码,但有些标准代码具有特殊含义。在本教程中,我们将了解这些代码及其含义。
2. 退出代码
在 shell 脚本中,我们使用exit 命令来生成退出代码。通过对不同的错误使用不同的退出代码,我们可以指示出了什么问题。
exit命令有一个参数,即我们要使用的退出代码。例如:
$ bash -c "exit 42"
$ echo $?
42
正如我们已经从概述中了解到的,一些退出代码具有特殊含义。但是,这并不意味着我们不能使用它们。他们很特别,没有保留。
此外,一些特殊代码在不同的 shell 中可能具有不同的含义。本文中的示例适用于 Bash shell。
3. 特殊退出代码
让我们来看看一些特殊的代码。
3.1. 一般错误:1
这是最常用的退出代码,应该用作各种错误的包罗万象的值。
3.2. 误用 Shell 内置:2
退出代码 2 表示某些 shell 内置命令的使用无效。内置命令的示例包括alias 、 echo 和printf 。
3.3. 无法执行:126
在这种情况下,无法执行调用的命令。当存在权限问题或命令不可执行时,很可能会发生这种情况。
3.4. 找不到命令:127
找不到命令。例如,这可能是因为我们的*PATH 有错别字或问题。*
3.5. 退出参数无效:128
exit命令 只接受一个正整数作为它的参数。这意味着不允许使用任何负数、小数或非数字值。
3.6. 致命错误信号“ n ”:128+ n
在 Linux 中,程序可能会发送33 种不同信号 中的一种。当程序在接收到这些信号之一后终止时,它将返回等于 128 + signal-number 的错误代码。
例如,当我们通过键入Control-C终止一个程序时,我们实际上是在向它发送一个SIGINT信号。该信号的值为 2,因此,程序将停止执行并返回值为 128 + 2 = 130 的退出代码。
3.7. 退出状态超出范围:255
根据我们的 shell,退出代码 255 可能意味着返回的退出代码在 0-255 范围之外。
4. 退出代码超过 255
因为退出代码由单个字节值表示,所以可能的最高退出代码是 255。但是,没有什么能阻止我们返回比这更大的退出代码。 超过 255 的值超出范围并环绕.
我们应该非常小心,因为这可能会导致意外结果。例如,退出代码 383 将被回绕并导致有效退出代码 127,转换为“找不到命令”:
$ bash -c "exit 383"
echo $?
127
虽然允许返回超过 255 的退出值,但最好始终避免它。