@ChristopherMorrisseyが指摘したように、proc_openは正しい選択です。proc_open を使用する際の注意点がいくつかあるため、ここで少し詳しく説明します。
最初のコード例 @ http://php.net/manual/en/function.proc-open.phpでは、全体的な使用法を示しており、それを参照します。
最初の警告は、パイプに関するものです。パイプは、子プロセスの STDIN、STDOUT、および STDERR にリンクする PHP のファイル ストリームです。この例では、パイプ インデックス 0 は、親 PHP プロセスの観点から見たファイル ストリームを表します。親プロセスがこのストリームに書き込むと、子プロセスへの STDIN 入力として表示されます。
POSIX 準拠の OS では、プロセスが終了する前に、プロセスへの STDIN を閉じる必要があります。親からパイプで fclose を呼び出すことは非常に重要です。そうしないと、子プロセスがスタックします。これは、例の次の行で行われます。
fclose($pipes[0]);
もう 1 つの注意点は、子プロセスの終了コードをチェックすることです。終了コードをチェックすることは、子プロセスが正常に終了したか、エラーになったかを判断する最良の方法です。少なくとも、子プロセスがいつ完了したかを知る必要があります。これと終了コードの確認は両方ともhttp://www.php.net/manual/en/function.proc-get-status.phpで行われます
プロセスが正しく終了することを確認したい場合はexitcode
、proc_get_status から配列に返されたフィールドを確認する必要があります。この終了コードは有効な値を 1 回だけ返すことに注意してください。それ以外の場合は -1 を返します。したがって、一度返される > -1 は、実際の終了コードです。というわけで、初回running
==偽、チェックexitcode
。
これが役立つことを願っています。