Linux C:收到信号后,是否可以知道发送方的PID?

dai*_*isy 16 c linux signals system

假设我的C程序处理SIGUSR1.当它收到信号时,是否可以知道是谁发送的?IE中.得到那个过程的pid?

dus*_*uff 16

是的,如果您使用该sigaction调用来设置信号处理程序而不是signal.这样做可以让你设置一个带有三个参数的信号处理程序:

  • 一个int,为信号编号(就像signal)
  • A siginfo_t *,是包含有关信号源的各种信息的结构,包括发送方的pid(如果适用).(它还包括一些有关自动信号信号原因的信息,如SIGSEGV.)
  • A ucontext_t *,与哪个线程获得信号有关.大多数可以忽略.


mpa*_*tel 10

是.使用注册信号处理程序sigactionSA_SIGINFO标志,在灌装sa_sigaction领域.现在你的处理函数接受一个siginfo_t*参数,其中包括一个字段si_pid.

请注意,si_pid仅在某些情况下设置.在您的情况下,您将要检查si_code设置为SI_USER或的检查SI_QUEUE.阅读man 2 sigaction更多.