Contents

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 、  echoprintf

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 的退出值,但最好始终避免它