私の C プログラムが を処理するとしますSIGUSR1
。
この信号を受信すると、誰が送信したかを知ることができますか? つまり、送信者プロセスの pid を取得する方法は?
はい。sigaction()
の代わりに呼び出しを使用してシグナル ハンドラを設定する場合signal
。これにより、次の 3 つのパラメーターを受け取るシグナル ハンドラーをセットアップできます。
int
, (のようにsignal
)siginfo_t *
場合は送信者の pid を含む、シグナルのソースに関するあらゆる種類の情報を含む構造体です。( のような自動シグナルのシグナルの原因に関する情報も含まれますSIGSEGV
。)ucontext_t *
、どのスレッドがシグナルを受け取ったかに関係しています。ほとんど無視できます。はい。フラグを使用sigaction
してシグナルハンドラを登録し、フィールドに入力します。これで、ハンドラー関数はフィールドを含むパラメーターを受け取ります。SA_SIGINFO
sa_sigaction
siginfo_t*
si_pid
si_pid
これは特定の状況でのみ設定されることに注意してください。あなたの場合、またはsi_code
に設定されているチェックをチェックする必要があります。詳細についてはお読みください。SI_USER
SI_QUEUE
man 2 sigaction