1

Windows で PHP スクリプトから PHP デーモンを起動しpopenた場合、そのスクリプトがまだ PHP スクリプトから実行されているかどうかを再度確認するにはどうすればよいですか?

モジュールとしてApache、phpを使用しています

更新: 開始されたプロセス

popen('start /b php process.php', 'r');

これが Windows で起動されると、php.exe プロセスが開始されます。そのプロセスがまだ実行されている場合、別の PHP スクリプトから後でチェックする (数時間実行される) プロセス PID を取得するにはどうすればよいですか?

一緒に起動されたプロセスのPIDを提供するはずのこのproc_openを読みましproc_get_status たが、popenで使用する同じコマンドでは何も起こりません

更新: 同じコマンドと proc_open で php.exe プロセスが開始されることに気付きましたが、起動したスクリプトが終了した直後に終了し、proc_get_status によって返される PID が Windows PID に対応していません。

4

2 に答える 2

2

PHP と Windows でプロセスを安全に実行するには、いくつかの方法があります。

1. WScript.Shell オブジェクトを使用してバックグラウンド プロセスを開始する

RunWindows に組み込まれている WScript.Shell オブジェクトのメソッドを使用してプロセスを開始できます。2 番目のパラメーターを変更することで、ウィンドウを非表示、表示、最小化などにすることができます。3 番目のパラメーターを false に設定すると、Run はプロセスの実行が完了するまで待機しません。このコードは Windows でのみ機能します。COM の詳細については、PHP のドキュメントを参照してください。

$WshShell = new COM("WScript.Shell");
$oExec = $WshShell->Run("cmd /C dir /S %windir%", 0, false);

2. popen と pclose を使用してバックグラウンド プロセスを開始する

このコードは、Linux と Windows で動作するはずです。

pclose(popen("start \"bla\" \"" . $exe . "\" " . escapeshellarg($args), "r"));

3. psexec でバックグラウンド プロセスを開始する

この方法では、フリーウェアのpstools を sysinternals からインストールする必要があります。

exec("psexec -d blah.bat"); 

詳細については、この短いチュートリアルを読んでください。以前に最初の方法を使用したことがありますが、常にうまくいきました。


既存のプロセスの PID を見つけるには、使用できないか、使用する必要がgetmypidあると思いposix_getpidますexec('tasklist');または、この拡張機能をインストールして、こちらの手順に従うこともできます。

于 2012-04-08T22:06:26.653 に答える
0

php から system() を使用する

cmd.exe の操作:

タスクリスト

Powershell がある場合:

取得プロセス

未検証。または、winapi 呼び出しを使用して小さなコンソール アプリを作成します。

于 2012-04-08T22:11:23.627 に答える