Linuxでは、いくつかの関連イベントが発生したときに多くのシグナルが生成されます。
シグナルとイベント間の接続は、どのように作成、削除、変更、有効化、無効化されますか? (好ましくはAPI)
カーネルが使用する信号とカスタム信号はありますか?別に扱われますか?
答え1
「信頼できる」および「リアルタイム」信号の生成、転送、および基本処理は、POSIXで指定。仕様は、どのイベントがどの信号を生成するかを定義します。 Linux信号を追加する他のUnixシステムのレガシー信号に対応します。イベントとシグナルの関連性を追加、削除、または変更するには、オペレーティングシステムでこれを実装し、POSIXが作成されたAustin Groupにケースを提出する必要があります。
信号の生成、送信、および処理を制御するために使用できるAPIは広範です。詳しくは上記のリンクをご覧ください。これらのいくつかは、信号がどのように処理されるか(基本操作、無視、または特定のハンドラ)を制御しますが、イベントと信号自体の間の相関は制御しません。したがって、浮動小数点例外は常に発生し、SIGFPE
他の方法で処理できます。他の場合は、プロセスが手動SIGFPE
で問題を発生させる可能性がありますが、SIGFPE
浮動小数点例外間の接続を無効にすることはできません。
いくつかの信頼できる信号はカスタマイズ目的のために設計されていますSIGUSR1
。SIGUSR2
これらの信号に対応する事前設定されたイベントはありませんが、事前設定された操作(受信プロセスの終了)があります。どのイベントがこれらの信号のいずれかを生成するかを決定することは、生成プロセスに依存する。特定の状況でこれらの信号を自動的に生成するようにカーネルに指示する方法はありません。 (BPFプログラムは信号を送信できるため、信号生成コードはカーネルでホストできますが、これはまったく同じではありません。)
リアルタイム信号はすべてユーザーが定義します。カスタム信頼できる信号と同様に、デフォルトで受信プロセスを終了します。
2番目の質問はすでにさまざまな信号が送信される原因は何ですか?