ExitCodes大于255,可能吗?

如果是的话,在哪个操作系统,shell或其他?

考虑下面的java程序(我只是用java作为例子,任何语言都适合这个问题,这更多的是关于操作系统):

public class ExitCode {
    public static void main(String args[]) {
        System.exit(Integer.parseInt(args[0]));
    }
}

在Linux和bash上运行它,它总是返回小于等于255的值,例如( echo $?打印先前执行的命令的退出代码)

> java ExitCode 2; echo $?
2

> java ExitCode 128; echo $?
128

> java ExitCode 255; echo $?
255

> java ExitCode 256; echo $?
0

> java ExitCode 65536; echo $?
0

编辑:下面的(只有,到目前为止)答案完全解释了在UNIX上发生的事情。 我还在想其他的操作系统。


在Unix和衍生物上不可能。 返回的退出状态信息由两个8位字段组成,一个包含退出状态,另一个包含关于死亡原因的信息(0表示程序控制下有序退出,其他值表示信号杀死它,并指示是否一个核心被倾倒)。


在现代Windows上,操作系统本身和默认控制台外壳( CMD.EXE )在至少整个32位有符号整数范围内接受并显示退出代码。 在CMD.EXE运行上面的示例给出了您请求的退出代码:

> java ExitCode 2
> echo %errorlevel%
2

> java ExitCode 128
> echo %errorlevel%
128

> java ExitCode 255
> echo %errorlevel%
255

> java ExitCode 256
> echo %errorlevel%
256

> java ExitCode 65536
> echo %errorlevel%
65536

Windows并没有真正拥有Unix信号的概念,也没有尝试劫持退出代码来添加额外的信息,所以只要你的shell(或任何程序最终读取退出代码)也不会这样做,你应该找回你退回的退出代码。 幸运的是,使用Microsoft C运行库的程序(包括使用MS Visual C ++编译的所有程序)保留退出代码,与退出进程一样。


Windows有更多的退出代码,超过14,000。 (我相信你经常在你自己的屏幕上看到它们中的一些)。

来了:

  • Windows退出代码列表。
  • PowerShell脚本来测试它们。
  • 链接地址: http://www.djcxy.com/p/28739.html

    上一篇: ExitCodes bigger than 255, possible?

    下一篇: Legal definitions of main() in C++14