Perl Win32::Process::KillProcess未返回正确的exitcode
我正在用perl编写一个函数,它将杀死给定PID的进程Perl Win32::Process::KillProcess未返回正确的exitcode,perl,Perl,我正在用perl编写一个函数,它将杀死给定PID的进程 sub ShutPidForWindows() { require Win32::Process; $PID = 1234; $count = 0; $ReturnStatus = 0; $ExitCode = 0 ; if ($PID == 0) { return ($ReturnStatus); } Win32::Process::KillPro
sub ShutPidForWindows()
{
require Win32::Process;
$PID = 1234;
$count = 0;
$ReturnStatus = 0;
$ExitCode = 0 ;
if ($PID == 0)
{
return ($ReturnStatus);
}
Win32::Process::KillProcess($PID, $ExitCode);
print "PID = ".$PID."\n";
print "Return Code = ".$ExitCode."\n";
if ($ExitCode)
{
$ReturnStatus = 1;
}
else
{
$ReturnStatus = 2;
}
return ($ReturnStatus);
}
执行此函数时,它总是返回2
。即使进程1234
不存在
我得到的o/p是:
PID = 1234
Return Code = 0
Perl文档说,ExitCode
将由进程返回的退出代码填充。然后ExitCode
应该是1
我做错了什么吗?问题是您使用的是
require
而不是use
来加载模块。有时这是可以的,但您应该始终遵循模块文档中的示例
您还必须在编写的每个Perl程序的顶部始终使用strict
和使用warnings
。这就需要声明所有的变量,这些变量应该尽可能靠近它们的第一个使用点。这些度量将揭示许多您可能忽略的错误,当您向他人寻求代码帮助时,这些度量尤其重要 如果在调用Win32::Process::KillProcess
后进行检查,您可能会看到如下值
The parameter is incorrect
这应该告诉您您做错了什么。如果流程不存在,您为什么认为退出代码应该是
1
?如果没有进程,则可能没有问题退出代码,$ExitCode
的值不相关。@Borodin即使进程存在,ExitCode也不会更改。如果我将ExitCode初始化为-1,那么在KillProcess之后它仍然是-1(即使该进程存在)。我看到的是KillProcess没有返回正确的ExitCodes;使用警告在perl代码中。当向函数传递参数时,以这种方式接收my($arg1,$arg2,@garbage)=@
;