2008-10-07 38 views
29

如果是,在哪个操作系统,shell或其他?ExitCodes大于255,可能吗?

考虑下面的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会发生什么。我仍然在想其他的操作系统。

+2

[此重复的问题](http://stackoverflow.com/q/5149228/824425)有[更好(但不被接受)的答案](http://stackoverflow.com/a/5149399/824425) 。 – 2015-01-05 10:21:05

回答

30

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

0

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

这里说到:

+8

您正在讨论由标准Windows API返回的错误代码。 OP想知道他可以为他/她自己的程序返回哪些错误代码。 – 2008-11-30 03:47:51

13

在现代Windows上,操作系统本身和默认控制台shell(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++编译的所有程序)保留退出代码,与退出进程一样。