我正在使用 system
调用外部应用程序,我需要解释它的退出代码。
我知道 system
从命令返回退出代码乘以 256,但是在 foo.bat
中我写 exit 256
结果为零。
为什么会这样?
最佳答案
Windows 使用 32 位退出代码,因此 exit 256
完全有效。
>cmd /c exit 256
>echo %ERRORLEVEL%
256
但是,Perl 只保留最低有效的 8 位。
>perl -e"system 'exit 256'; CORE::say $?>>8"
0
>perl -e"system 'exit 266'; CORE::say $?>>8"
10
这是没有充分理由的 Perl 缺陷。如果你使用 Win32::Process而不是 system
,您可以获得正确的退出代码。
>perl -MWin32::Process=NORMAL_PRIORITY_CLASS,INFINITE -e"Win32::Process::Create(my $proc, $ENV{COMSPEC}, 'cmd /c exit 256', 0, NORMAL_PRIORITY_CLASS, '.') or die $^E; $proc->Wait(INFINITE); $proc->GetExitCode(my $exit_code); CORE::say $exit_code;"
256
关于perl - system() 返回错误的退出代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44604983/