1. ホーム
  2. linux

[解決済み] SIGRTMAXとSIGRTMINの使い方は?

2022-02-12 18:28:07

質問事項

POSIXで定義されているリアルタイム・シグナルがどのようにシグナルであるかは知っています。例えば、SIGSEGVは無効なメモリ参照で発生し、SIGINTはctrl+cのようなキーボード割り込みで発生します。

SIGRTMAXやSIGRTMINといったシグナルはどのように生成され、使用されるのですか?

解決方法は?

実は、SIGRTMAXとSIGRTMINのシグナルを生成する方法がわかりました。

もし今後、誰かがこれに出会ったら...。

まず 構造体 SIGACTION のように、必要なメンバーを設定します。設定 sa_handler を、シグナルの発生を処理する関数に設定します。

これを実行するために、関数 sigaction() は、linuxのマニュアルで指定されている引数を渡してください。

というわけで、今度は struct sigevent のメンバを設定し、処理するシグナル番号とその通知をどのように送信するかを指定します。

これで設定は完了です。次は、時間切れなどのシグナルを発生させる現象やイベントを作成する必要があります。

このためには、タイマーのハンドラを create_timer() これにより、sigeventとハンドラが関連付けられます。

次に、有効期限を設定します。 構造体 itimerspec を使用し、さらに timer_settime() で、有効期限をハンドラに関連付けます。

つまり、有効期限はハンドラに関連付けられ、時間ハンドラはsigeventに関連付けられ、sigeventはそのシグナルをsigactionで設定されたハンドラにリダイレクトします。