まず、保留中のシグナル セットとは何かを確認しましょう。信号が生成されて宛先に到達するとき、このプロセスは信号配信と呼ばれます。シグナルの生成から配信までの中間状態は、シグナルの保留状態と呼ばれます。保留状態の理由は、信号がブロックされている、つまり信号マスク ワード (またはブロックされた信号セット) 内の対応するビットが 1 に設定されている可能性があります。ブロッキング信号セットと保留信号セットは両方ともカーネルによって維持されます。プロセス全体を次の図に示します。
場合によっては、特定の信号をブロックする必要があるため、ブロック信号セットを変更する必要があります。では、ブロッキング信号セットを変更するにはどうすればよいでしょうか?システムによって提供される 1 つの方法は、最初にブロッキング信号セットと同じセットを作成し、次にそれを使用してブロッキング信号セットを変更することです。
システムは一連の信号セット設定機能を提供します。これらの機能は次のとおりです:
リーリー上記の関数を使用して信号セットを作成した後、ブロッキング信号セットを変更するにはどうすればよいですか?システムは、sigprocmask 関数という別の関数を提供します。 sigprocmask 関数は、信号をブロックしたり、信号のブロックを解除したりするために使用できますが、その本質は、作成した信号セットを使用して、ブロッキング信号セットを変更することです。
関数プロトタイプ:
リーリー戻り値:
成功: 0; 失敗: -1、エラー番号を設定
パラメータの説明:
set: 受信パラメータはビットマップです。セット内のどのビットが 1 であるかは、どのシグナルが現在のプロセスによってブロックされているかを示します。
oldset: 送信パラメータ。古い信号マスク セットを保存します。これは setitimer に似ています。
howパラメータ値:
現在の信号マスクワードがマスクであると仮定します
1.SIG_BLOCK: how がこの値に設定されている場合、設定はブロックする必要がある信号を示します。マスク = マスク | set
と同等2.SIG_UNBLOCK: how がこれに設定されている場合、設定はブロックを解除する必要がある信号を示します。マスク = マスク & ~set
と同等3.SIG_SETMASK: how がこれに設定されている場合、set は元のマスクを置き換えるために使用される新しいマスク セットを表します。 sigprocmask の呼び出しによっていくつかの現在のシグナルのブロックが解除される場合、sigprocmask が返される前に少なくとも 1 つのシグナルが配信されます。
保留中のシグナルのセットを読み取るにはどうすればよいでしょうか?システムは sigpending 機能を提供します。
関数プロトタイプ:
リーリーパラメータの説明:
送信パラメータを設定します。
戻り値:
戻り値: 成功: 0; 失敗: -1、エラー番号を設定
例: すべての通常のシグナルの保留ステータスを画面に出力します。
リーリー以上がLinuxシグナルセット操作機能の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。