Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 在调用Win32::Process::Create之后,尝试从子shell获取退出代码_Perl_Winapi_Multiprocessing_Exit Code - Fatal编程技术网

Perl 在调用Win32::Process::Create之后,尝试从子shell获取退出代码

Perl 在调用Win32::Process::Create之后,尝试从子shell获取退出代码,perl,winapi,multiprocessing,exit-code,Perl,Winapi,Multiprocessing,Exit Code,为什么以下输出是0而不是4 use strict; use warnings; use feature qw( say ); use Win32::Process qw( NORMAL_PRIORITY_CLASS INFINITE ); Win32::Process::Create(my $ProcessObj, $ENV{COMSPEC}, $ENV{COMSPEC}.' /c start /min perl -e"sleep 5; exit 4"', 0, NO

为什么以下输出是
0
而不是
4

use strict;
use warnings;
use feature qw( say );

use Win32::Process qw( NORMAL_PRIORITY_CLASS INFINITE );

Win32::Process::Create(my $ProcessObj,
   $ENV{COMSPEC},
   $ENV{COMSPEC}.' /c start /min perl -e"sleep 5; exit 4"',
   0,
   NORMAL_PRIORITY_CLASS,
   '.',
)
   or die $^E;

$ProcessObj->Wait(INFINITE);
$ProcessObj->GetExitCode(my $exit_code);
say $exit_code;  # 0

您正在执行的程序是
cmd
。它的退出代码是它执行的最后一个命令的退出代码

最后执行的
cmd
程序是
start
,它启动一个程序并退出。它的退出代码不是它启动的程序的退出代码。怎么可能呢?它甚至可能还没有开始执行,更不用说退出了


获取脚本退出代码的最佳方法是,如果它是您自己的孩子。不要使用
cmd
start
;使用
CREATE\u NEW\u控制台
标志直接启动程序。我不知道如何最小化它,但是你必须搜索它。(如果不存在Perl解决方案,我们可以帮助您创建一个Perl解决方案,并让您了解如何在C中实现它。)

好的,这是有道理的-但是,在过程结束时,当我从内部脚本打印它时,它显然是
2
时,为什么我没有看到构建文本中的错误呢?谢谢,这看起来很明显,现在我将我的两行代码改为:$cmd=“compile.pl$dir$semacomile$log$semaLogName$compileType$skipPDB”;Win32::Process::Create($ProcessObj,“C:\\Perl64\\bin\\wperl.exe”,$cmd,0,普通\u优先级\u类,”);但现在,我只是得到一个错误9打印的一切。我应该为此创建一个新问题吗?第三个参数应该是命令。使用正确的命令(
“C:\\Perl64\\bin\\wperl.exe compile.pl…”
)有帮助吗?无论如何,你又一次非常不清楚了。“一切打印错误9”?请