如果是,在哪个操作系统,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上,操作系统本身和默认控制台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++编译的所有程序)的程序保留退出代码和退出进程.