19

私の C プログラムが を処理するとしますSIGUSR1

この信号を受信すると、誰が送信したかを知ることができますか? つまり、送信者プロセスの pid を取得する方法は?

4

4 に答える 4

17

はい。sigaction()の代わりに呼び出しを使用してシグナル ハンドラを設定する場合signal。これにより、次の 3 つのパラメーターを受け取るシグナル ハンドラーをセットアップできます。

  • シグナル番号のint, (のようにsignal)
  • 該当するsiginfo_t *場合は送信者の pid を含む、シグナルのソースに関するあらゆる種類の情報を含む構造体です。( のような自動シグナルのシグナルの原因に関する情報も含まれますSIGSEGV。)
  • A ucontext_t *、どのスレッドがシグナルを受け取ったかに関係しています。ほとんど無視できます。
于 2012-07-16T16:47:44.683 に答える
11

はい。フラグを使用sigactionしてシグナルハンドラを登録し、フィールドに入力します。これで、ハンドラー関数はフィールドを含むパラメーターを受け取ります。SA_SIGINFOsa_sigactionsiginfo_t*si_pid

si_pidこれは特定の状況でのみ設定されることに注意してください。あなたの場合、またはsi_codeに設定されているチェックをチェックする必要があります。詳細についてはお読みください。SI_USERSI_QUEUEman 2 sigaction

于 2012-07-16T16:48:39.580 に答える