これがサーバー障害またはスタックオーバーフローに適しているかどうかはわかりませんが、ここで説明します。
私はApacheMPMプリフォークでmod_phpを使用しており、次のような新しいプロセスを生成しています。
<?php
exec("/usr/bin/php -f backgroundScript.php &");
?>
新しいbackgroundScript.php子プロセスが長時間実行されると仮定すると…
1)親PHPプロセスはアイドル状態と見なされますか?サーバープールに戻りますか?
2)Apacheが親PHPプロセスを強制終了してMinSpareServers
に戻る場合、backgroundScript.phpもクリーンアップされるか、無期限に実行を継続しますか?
3)ApacheがbackgroundScript.php子プロセスを誤って強制終了する可能性がある他の方法はありますか? service httpd stop
多分?
アプリケーションをバックグラウンドで実行して忘れたいですか?
また、幹部からのメモ:
注意:
プログラムがこの関数で開始された場合、プログラムがバックグラウンドで実行され続けるためには、プログラムの出力をファイルまたは別の出力ストリームにリダイレクトする必要があります。そうしないと、プログラムの実行が終了するまでPHPがハングします。
私はこれらの規則に違反して、醜いコードを持っています:
<?php echo "pre"; exec("someuglylongandworkingthingwithoutput &"); echo "post"; ?>
デフォルトのApache + php(prefork +モジュール)を使用してFedoraボックスでテストしたところ、killall -9/usr/sbin/httpdでプロセスを強制終了しました。
&
-いいえ、そうではありませんでしたが、それでも実行中と見なされます。私のバックグラウンドアプリはまだ実行中です/dev/null
を追加した後-すべてが正常で、親プロセスIDは「1」です。