1つのPHPスクリプトでproc_openを使用してプロセスを作成しています。
別のスクリプトでこれを終了するにはどうすればよいですか。proc_openによって返されたリソースを渡すことができません。
また、proc_get_status()を使用してみましたが、ppidが返されます。私は子供たちのpidを取得しません。
開発環境:WAMP
任意の入力を歓迎します。
1つのPHPスクリプトでproc_openを使用してプロセスを作成しています。
別のスクリプトでこれを終了するにはどうすればよいですか。proc_openによって返されたリソースを渡すことができません。
また、proc_get_status()を使用してみましたが、ppidが返されます。私は子供たちのpidを取得しません。
開発環境:WAMP
任意の入力を歓迎します。
モデルを再検討して、実際に別の場所からプロセスを強制終了する必要があることを確認することをお勧めします。最も些細な状況を除いて、コードのデバッグと保守はますます困難になります。
カプセル化された状態を維持するために、終了するプロセスに信号を送り、強制終了するプロセスを正常に終了することができます。それ以外の場合は、通常のIPCを使用して、「ねえ、バディ。シャットダウンしてください」というメッセージを送信できます。
編集:2番目の段落では、これを行うためのスクリプトを起動してしまう可能性があります。それはいいです。避けたいのはキル-9タイプのものです。代わりに、プロセスを正常に終了させます。
純粋なPHPでこれを行うには、次の解決策があります。
posix_kill($pid, 15); // SIGTERM = 15
プロセスを作成するためにいくつかの方法を使用できます。このメソッドは通常、新しいプロセスのPIDを返します。
これはあなたのために働きますか?:
$process = proc_open('php', $descriptorspec, $pipes, $cwd, $env);
$return_value = proc_close($process);
次のようなものを使用して、他のプロセスを起動することをお勧めします。
$pid = shell_exec("nohup $Command > /dev/null 2>&1 & echo $!");
そこにプロセスが実行され、実行中のプロセスIDが与えられます。
exec("ps $pid", $pState);
$running = (count($pState) >= 2);
終了するには、いつでも使用できます
exec("kill $pid");
ただし、PHPが実行されているユーザーが所有していないプロセスを強制終了することはできません(nobodyとして実行されている場合)。新しいプロセスをnobodyとして開始し、ユーザーnobodyで実行されているプロセスのみを強制終了できます。