如果是,在哪个操作系统,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上发生的事情。我还在想其他操作系统。
答案 0 :(得分:33)
在Unix和衍生品上不可能。返回的退出状态信息由两个8位字段组成,一个包含退出状态,另一个包含有关死因的信息(0表示程序控制下有序退出,其他值表示信号杀死它,并指示是否一个核心被倾倒了。)
答案 1 :(得分: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 ++编译的所有程序)的程序保留了退出代码和退出进程。
答案 2 :(得分:0)
Windows有更多退出代码,超过14,000。 (我相信你经常在自己的屏幕上看到一些)。
来了: