私はpcntl_forkを使用して、SMTP経由で電子メールを送信する子プロセスを開始しています。PHP - pcntl_forkによって開始された子プロセスの終了
子プロセスはPEAR Mailパッケージを使用して電子メールを送信しますが、リモートサーバーが応答しない場合、問題は、PHPで設定された時間制限に関係なく、応答を待っているだけです。 ini。
これを回避するために、私はpcntl_alarm関数を使用して、子プロセスがまだ実行中の場合に30秒後に関数をトリガーします。
function handlesig($sig) {
global $pid,$node,$resend;
posix_kill($pid,SIGKILL);
mysql_query("insert into log (event) values ('Timed out!')");
}
私は子プロセスを強制終了しますが、システムにはプロセスが存在しません。
(接続が完了しないために)子プロセスが強制的に終了することなく強制的に終了し、無効なプロセスが蓄積されないようにするために、別の信号が必要ですか?
私が悲惨な理由を送信している理由PHPを介してctlyは私が応答を取得し、成功/ソフトバウンス/ハードバウンスのためにそれを適切に処理することができるようにです。 SIGTERMとSIGKILLは私が知っている唯一のシグナルであり、SIGTERMは機能しませんでしたので、SIGKILLを使用しました。私はSIGSTOP/SIGTSTPを試みます。 – Tim
ええと個人的には、2つの別々のスクリプトでこれを行います。バウンスを処理するためのローカルsmtpサービスを介した送信のためのもの、バウンスと成功に対処する自動ポップ/取得スクリプトの一種。 この理由の1つは、smtpにメールを配信するphpスクリプトがWebサーバーの子をブロックしていないことです。たとえば、最大20の子があり、すべての子が外部ソースへの接続を開始している場合、子が再び解放されるまで、他のサービスは利用できません。 – user207675