Perl Win32::Process::KillProcess未返回正确的exitcode

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

我正在用perl编写一个函数,它将杀死给定PID的进程

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;使用警告my($arg1,$arg2,@garbage)=@