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上,操作系统本身和默认的控制台shell( CMD.EXE
)在至less整个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有更多的退出代码,超过14000。 (我相信你经常在你自己的屏幕上看到一些)。
来了:
- Windows退出代码的列表 。
- PowerShell脚本来testing它们 。