3

これを実行しようとしました:

function kill_hr(){

    exec("taskkill /IM uper.exe", $output = array(), $return);

    print_r($output);

    echo "<br />".$return;

}

ただし、出力はこれであり、あまり役に立ちません。

配列 ( ) 1

プロセスが存在しない場合、これは次のとおりです。

配列 ( ) 128

プロセスが存在するときに 1 が表示される理由を突き止めようとしています - これはパーミッションの問題ですか? もしそうなら、どうすればこれを修正できますか?

4

4 に答える 4

8

ご協力いただきありがとうございます - 私は最終的にこれを使用してプロセスを強制終了することができました:

$output = shell_exec('taskkill /F /IM "uper.exe"');

exec でも機能すると確信していますが、重要な部分はそれ/Fを強制することです! :)

于 2009-12-06T19:35:24.827 に答える
3

他の回答に加えて、コマンドによって返される数値は、Windows では ERRORLEVEL と呼ばれます。コマンドラインで taskkill をいじっているとき、最後に返されたエラーレベルを表示することができます。

echo %ERRORLEVEL%
于 2009-12-05T23:05:06.137 に答える
3

私は以前にこの問題を抱えていました-過去に機能したいくつかのこと:

解決策 1

taskkill次の Windowsstartコマンドで起動します。

exec('start /B taskkill /IM notepad.exe', $output = array(), $return);

解決策 2

次を使用して新しいコマンドラインを開きcmd.exeます。

exec('cmd /c taskkill /IM notepad.exe', $output = array(), $return);

**注*: 私は過去に PHP からバックグラウンド プロセスを起動するために両方の方法を使用しました。戻り値がどうなるかわからないので、実験する必要があります。

于 2009-12-05T23:01:53.787 に答える
1

$return値は、プログラムが返す値です。Windowsでは、戻り値0と1は通常、成功を示すために使用されるため、終了が成功した時期を簡単に知ることができます。

ただし、戻り値128は任意であり、のプログラム開発者がtaskkill自分で決定したことを意味します。128は、プロセスが存在しないことを意味している可能性があります。

taskkill残念ながら、の戻り値を文書化した文書はないようです。

目標がuper.exe存在しないようにすることである場合、128と1の戻り値は両方とも受け入れられ、コードは次のようになります。

function kill_hr()
{
    exec("taskkill /IM uper.exe", $output = array(), $return);
    return $return == 1 || $return == 128;
}

関数は、正常に終了した場合、または最初から実行されていなかった場合にtrue返されます。uper.exe

編集:投稿を読み直して、次のことを試すことができます。runas(管理コマンドプロンプトから)Webサーバーユーザーとしてコマンドプロンプトを開始するために使用します。

runas /user:account@machine cmd

次に、Webサーバーとしてコマンドプロンプトを実行し、taskkillそこからコマンドを発行できます。次に、テキストのエラーメッセージが表示される可能性があります。

于 2009-12-05T22:30:05.380 に答える