0

PID を指定してプロセスを強制終了する関数を perl で作成しています。

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

If you examine $^E after the call to Win32::Process::KillProcess, you might see a value like

The parameter is incorrect

which should tell you that you did something wrong.

于 2013-01-17T22:11:35.207 に答える
0

問題は、モジュールをロードするrequire代わりに使用していることです。useこれで問題ない場合もありますが、常にモジュールのドキュメントの例に従う必要があります。

また、作成するすべての Perl プログラムの先頭に必ず配置 する必要があります。これにより、すべての変数を宣言する必要が生じます。これは、最初の使用ポイントのできるだけ近くで行う必要があります。これらの対策により、他の方法では見落としがちな多くのエラーが明らかになり、コードについて他の人に助けを求める場合に特に重要です。use strictuse warnings

于 2013-01-17T17:57:51.767 に答える