0

我正在用 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 Doc 说这ExitCode将由进程返回的退出代码填充。那么ExitCode应该是1

我做错什么了吗?

4

2 回答 2

0

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

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

于 2013-01-17T17:57:51.767 回答
0

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

The parameter is incorrect

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

于 2013-01-17T22:11:35.207 回答