信号処理機構の動作を学習するPHP

little bottle
リリース: 2023-04-06 06:02:01
転載
2280 人が閲覧しました

この記事は主に 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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート