代码之家  ›  专栏  ›  技术社区  ›  Davide

exitcodes大于255,可能吗?

  •  30
  • Davide  · 技术社区  · 16 年前

    如果是,在哪个操作系统、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上的情况。我还在想其他的操作系统。

    3 回复  |  直到 14 年前
        1
  •  32
  •   Jonathan Leffler Toon Krijthe    16 年前

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

        2
  •  13
  •   Michael Ratanapintha    16 年前

    在现代窗口、操作系统本身和默认控制台外壳上( CMD.EXE ,接受并显示至少整个32位有符号整数范围内的退出代码。在中运行上面的示例 CMED 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(或任何程序最终读取退出代码)也不这样做,您应该返回返回的退出代码。幸运的是,使用微软的C运行时(包括用MS VisualC++编写的所有程序)的程序保留退出进程的退出代码。

        3
  •  0
  •   Veynom    16 年前

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

    来了: