gpt4 book ai didi

Linux:信号源

转载 作者:太空宇宙 更新时间:2023-11-04 09:36:33 26 4
gpt4 key购买 nike

如何可靠地确定一个进程是由于其自身的不当行为而收到信号还是由另一个进程发送信号?基本上,如何确定 si_pid 字段是否有效。

最佳答案

如果 siginfo_t 结构中的 si_pidgetpid() 匹配,则进程会向自己发出信号。否则,另一个过程。由于进程 ID 在任何时间点都是唯一的,因此您现在拥有的 PID 不可能在它拥有您的 PID 时向您发送信号(因为那时它会向自己而不是您发出信号)。

编辑:

正如您所发现的,si_pid 字段并不总是设置;有时它包含垃圾值。首先要检查的是,在注册处理程序时,您是否已在 struct sigactionsa_flags 字段中传递了 SA_SIGINFO。否则,您的处理程序可能根本不会收到 siginfo_t

一旦完成,就会有关于何时设置 si_pid 的规则,如下所述:https://www.mkssoftware.com/docs/man5/siginfo_t.5.asp#Signal_Codes

简而言之:如果 si_code 是以下之一,则应设置 si_pid:

  • SI_USER - 包括调用 kill()
  • SI_QUEUE
  • SI_TIMER
  • SI_ASYNCIO
  • SI_MESGQ

每当 si_signoSIGCHLD 时,它也会被设置。

关于Linux:信号源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25976570/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com