はい。 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 *、これはどのスレッドがシグナルを受け取ったかに関係しています。ほとんどの場合、無視できます。