この記事は主に PHP 言語で書かれた信号処理機構の例を説明したものであり、一定の参考になると思いますので、興味のある方はぜひ学んでみてください。
function sig_handler($sig) { print("handled sig: $sig\n"); } pcntl_signal(SIGIO, "sig_handler"); posix_kill(posix_getpid(),SIGIO); while(true) { posix_kill(posix_getpid(),SIGIO); pcntl_signal_dispatch(); sleep(1); }
PHP が提供する Declare(ticks=1) や Tick_handler() などの信号処理メカニズムを使用するのではなく、手動で信号キューを循環することをお勧めします。ティックメカニズム、毎回 ステートメントが実行されるたびに、シグナルがあるかどうかを確認するために、tick_handler が呼び戻されますが、ほとんどの場合、シグナルはありません。
posix_signal は、シグナルのコールバック処理を設定します。
posix_kill は、シグナルをプロセスのシグナル保留キューに入れるだけです。シグナルのコールバックはトリガーされません。シグナル キュー内のシグナルは、
posix_getpwnam("nginx"): ユーザー名の uid、gid、その他の情報を取得します
pcntl_signal(SIGPIPE, SIG_IGN, false): SIGPIPE を無視しますカーネルによって送信された信号の場合、接続が閉じられると、プロセスは無効なソケットにデータを送信し続け、システムは RST 制御ビットを含む TCP パケットを受信し、システムはプロセスに SIGPIPE 信号を送信して、接続が切断され、これ以上書き込みが必要ないことを処理します。このシグナルのデフォルトの処理はプロセスを終了することですが、プロセスはそれをキャッチしてシグナルを無視し、不本意に終了されることを避けることができます。
ソケット コンテキスト オプション:
backlog: ストリーム リスニング キュー内の未処理の接続の数を制限するために使用されます
so_reuseport: ポートを再利用します (カーネル スケジューリングによって接続されます)同じポート上で複数のプロセスがリッスンしています。対応するプロセスはハッシュでマークされているため、リッスンしているプロセスの数は変更できません。)
タイマー信号処理
pcntl_signal(SIGALRM,"sig_handler"); pcntl_alarm(2); function sig_handler($sig) { echo "one second after"; } while (1) { pcntl_signal_dispatch(); sleep(1); }
関連チュートリアル: php プログラミングの入門から熟練度まで
以上が信号処理機構の動作を学習するPHPの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。