ホームページ > バックエンド開発 > PHPの問題 > php pcntl_signal が効果がない場合はどうすればよいですか?

php pcntl_signal が効果がない場合はどうすればよいですか?

藏色散人
リリース: 2023-03-13 10:12:02
オリジナル
2515 人が閲覧しました

php pcntl_signal は、デフォルトでは、pcntl が中断されたシステム コールを自動的に再起動するため、効果がありません。外部パフォーマンスとして、システム コールは中断できません。解決策は、システム コールを再起動しないように設定することです。

php pcntl_signal が効果がない場合はどうすればよいですか?

この記事の動作環境: Windows7 システム、PHP7.1 バージョン、DELL G3 コンピューター

こんな場合はどうすればよいですかphp pcntl_signal が動作しません?

php pcntl_signal の使い方と注意点

最近、php をベースにマルチプロセスサーバーを構築する必要があります。正常に再起動するには、kill によって送信された SIGTERM シグナルをキャプチャする必要があるため、pcntl_signal が使用されます。

最初、キャプチャされた信号が無効であり、信号処理機能に入力できないことがわかりました。ドキュメントを読んだところ、declare(ticks = 1) を実行する必要があることがわかりました。説明には、クロックを生成するためなどと書かれていますが、私の理解は水晶発振器に似ています。追加後、親プロセスはシグナルを受信できるようになります。

しかし、子プロセスはまだシグナルを受信できません。長時間確認しましたが、例外は見つかりませんでした。子プロセスは通常、socket_accept をブロックします。ここでシステム コールを中断できないのではないかと思い、 while 1 ループに変更すると、正常に割り込み処理関数に入ることができました。

そこで調べてみると、pcntl はデフォルトで中断されたシステムコールを自動的に再開するようになっており、外部のパフォーマンスとしてはシステムコールを中断できないことが分かりました。

今マニュアルを見返してみると、pcntl_signal には 3 番目のパラメータがあり、これもオプションのパラメータで、システムコールを自動的に再起動するかどうかを決定することができます。 。

pcntl_signal 関数の概要

(PHP 4 >= 4.1.0、PHP 5、PHP 7、PHP 8)

pcntl_signal — 信号プロセッサをインストールする

説明

pcntl_signal(int $signo, callback $handler, bool $restart_syscalls = true): bool
ログイン後にコピー

関数 pcntl_signal() は、signo で指定された信号用の新しい信号プロセッサをインストールします。

パラメータ

signo

シグナル番号。

handler

シグナル ハンドラーは、ユーザーが作成した関数またはメソッドの名前にすることも、システム定数 SIG_IGN (注釈: シグナル ハンドラーを無視する) または SIG_DFL (デフォルトのシグナル) にすることもできます。

注:

オブジェクト メソッドを使用すると、オブジェクトの参照カウントが増加するため、他の処理に変更するかスクリプトが終了するまで保持されることに注意してください。

restart_syscalls

シグナルの到着時にシステム コールの再開を利用できるかどうかを指定します。 (訳注:情報を確認したところ、このパラメータは、システムコールがシグナルによって中断されたときに、システムコールを最初からやり直すかどうかを意味します。ただし、 http://bugs.php.net/bug.php?id によると) =52121、このパラメータはバグがあるため無効です。)

以上がphp pcntl_signal が効果がない場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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