はい。 sigaction
を使用してシグナル ハンドラーを登録します。 SA_SIGINFO
で フラグ、sa_sigaction
に記入 分野。これで、ハンドラー関数は siginfo_t*
を受け取ります フィールド si_pid
を含むパラメータ .
si_pid
に注意してください 特定の状況下でのみ設定されます。あなたの場合、そのチェックをチェックしたいと思うでしょう si_code
SI_USER
に設定されています または SI_QUEUE
. man 2 sigaction
を読む
はい、sigaction()
を使用する場合 signal
の代わりにシグナル ハンドラーをセットアップする呼び出し .そうすることで、次の 3 つのパラメーターを受け取るシグナル ハンドラーをセットアップできます。
int
、シグナル番号 (signal
のように) )- A
siginfo_t *
これは、該当する場合は送信者の pid を含む、シグナルのソースに関するあらゆる種類の情報を含む構造です。 (また、SIGSEGV
のような自動シグナルのシグナルの原因に関する情報も含まれています。 .) - A
ucontext_t *
、これはどのスレッドがシグナルを受け取ったかに関係しています。ほとんどの場合、無視できます。