GNU/Linux >> Linux の 問題 >  >> Linux

Linux C:シグナルを受信すると、送信者の PID を知ることは可能ですか?

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

Linux
  1. 無料コマンドの分析:Linuxシステム管理者が知っておくべきこと

  2. Linux で特定のプロセスのオープン FD 制限を確認する

  3. initrd イメージを作成せずに Linux カーネルを起動することはできますか?

  1. Linuxカーネルについて知らなかった30のこと

  2. 最もよく使用される7つのLinux名前空間

  3. Linux システムで JVM パスを知る方法は?

  1. Linux –特定のポートを使用してプロセスのPidを見つけますか?

  2. LinuxでL1、L2、L3キャッシュ、RAMのサイズを知る方法はありますか?

  3. C でのシグナル キューイング