2013-01-17 42 views
0

我正在写一个perl函数,它会在给定PID的情况下终止一个进程。Win32 :: Process :: KillProcess没有返回正确的退出代码

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

我做错了什么?

+0

如果进程不存在,为什么你认为退出代码应该是'1'?如果没有进程,那么退出代码就不会有问题,'$ ExitCode'的值是无关紧要的。 – Borodin

+0

@Borodin即使进程存在,ExitCode也不会改变。如果我初始化ExitCode来说-1,它在KillProcess之后仍然是-1(即使进程存在)。我看到的是KillProcess没有返回正确的ExitCodes。 – user1987769

+0

始终使用'use strict;使用警告;'在你的Perl代码中。当传递参数给一个函数时,以这种方式接收'my($ arg1,$ arg2,@garbage)= @ _'; –

回答

0

问题是,您正在使用require而不是use加载模块。有时候这是可以的,但你应该始终遵循模块文档中的例子。

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

0

如果你调用Win32::Process::KillProcess后检查$^E,你可能会看到

The parameter is incorrect 

的值应该告诉你,你做错了什么。