Win32 :: Process :: KillProcess没有恢复正常的exitcode

时间:2013-01-17 16:23:04

标签: perl

我在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不存在。

我得到的是:

PID = 1234
Return Code = 0

Perl Doc说,ExitCode将由进程返回的退出代码填充。然后ExitCode应为1

我做错了吗?

2 个答案:

答案 0 :(得分:0)

问题是您使用require代替use来加载模块。有时这没关系,但您应该始终遵循模块文档中的示例。

您还必须总是 use strictuse warnings位于您编写的每个Perl程序的顶部。这将使您有必要声明所有变量,这些变量应尽可能接近其第一个使用点。这些措施将揭示您可能忽略的许多错误,并且在您向其他人寻求代码帮助时尤为重要。

答案 1 :(得分:0)

如果您在调用Win32::Process::KillProcess后检查$^E,则可能会看到类似

的值
The parameter is incorrect

应该告诉你你做错了什么。