私は不思議だった。 PHPリクエストがあり、PHPコードがexec
経由でコマンドラインツールを呼び出した場合PHPとマルチスレッド
コマンドラインは、PHPスクリプトが実行されているスレッドとは別のスレッドで処理されていますか?
もし両方のコアで共有されているのであれば? manual suggestsとして
私は不思議だった。 PHPリクエストがあり、PHPコードがexec
経由でコマンドラインツールを呼び出した場合PHPとマルチスレッド
コマンドラインは、PHPスクリプトが実行されているスレッドとは別のスレッドで処理されていますか?
もし両方のコアで共有されているのであれば? manual suggestsとして
:
プログラムは、それがバックグラウンドで実行を継続するためには、この機能を起動した場合は、プログラムの出力をファイルや別の出力ストリームにリダイレクトする必要があります。そうしないと、プログラムの実行が終了するまでPHPが停止します。
これは、プロセスがフォークされておらず、メインスレッド上で実行されていると考えられる場合があります。 PHPは実際に出力が終了するのを待って、ログの最後の行を取得します。
ただし、バックグラウンドでコマンドを実行する方法があります:
nohup MY_COMMAND > /dev/null 2>&1 & echo $!
exec
は、出力の最後の行の値を受信するので、これはプロセスのpid
を返し、あなたができるようになります後でkill
になります。
fastcgi_finish_request()
関数を使用することができます。
この関数は、スクリプトの実行を停止せずにクライアントに応答を返します。
mail($recipient, 'Subject', 'Hello, Kitty!');
echo 'Okay, we sent the e-mail';
そして、これはあなたがfpm
に電子メールを送信できるかである:例えば、これはあなたがfpm
せずに電子メールを送信する方法である
echo 'Okay, we sent the e-mail';
fastcgi_finish_request();
mail($recipient, 'Subject', 'Hello, Kitty!');
この場合、クライアントはエコーれますテキストとmail
関数は引き続きバックグラウンドで実行されます。
ちょうどあなたがfpm
を使用する前session_write_close();
であなたのセッションを閉じることを忘れないでください;)私はclarkkさんのコメントに気づいたときに
もあります 'fastcgi_finish_requestコメントをフラグ'' php-fpm'ユーザが利用できます。これはサーバに応答を返し、その機能の後のすべてがバックグラウンドで実行され続けます(並べ替え)。あなたはあなたの答えでそれを言えるでしょうか?私はこの情報だけを含むもう一つの答えでスレッドを汚染したくありません。 –
@ N.B。私はヒントのために、私の答え、高校を更新しました! –
が答えることはちょうど約ました... – obe
@obeだけ)( –