【问题标题】:Finding the process which sent signal in c查找在c中发送信号的进程
【发布时间】:2014-07-07 18:47:51
【问题描述】:

我有一个子进程,它可能会从其父进程或其他地方接收 sigterm 信号。如果信号来自父母,我必须采取适当的行动。 在 c(linux) 中如何判断接收到的信号是否来自父级?

【问题讨论】:

  • 实际上,我刚刚意识到您在询问 SIGKILL。没有办法做你想做的事。如果给孩子发送 SIGKILL 信号,它就死了,故事结束。
  • SIGKILL 无法被捕获。SIGKILL 信号被发送到进程以使其立即终止(终止)。与 SIGTERM 和 SIGINT 相比,这个信号不能被捕获或忽略,并且接收进程在接收到这个信号时不能执行任何清理。 en.wikipedia.org/wiki/Unix_signal
  • 对不起,它是 sigterm。我编辑了它。

标签: c linux process


【解决方案1】:

您使用SA_SIGINFO 标志使用sigaction 设置信号处理程序。您的处理程序将接受siginfo_t 的参数。在 siginfo_t 结构中是字段si_pid。这是发送进程的进程 ID。将其与孩子的ppid().匹配

【讨论】:

  • 谢谢。我们已经使用signal() 来捕获信号。有没有在不使用 sigaction 的情况下找到进程?
  • 当然,您可以使用 sigwaitinfosigtimedwait 等替代方案,如果这适合您的工作。但据我所知,从 siginfo_t 结构中获取 pid 是唯一的方法。此外,由于这是 linux,还有 signalfd 将(类似地)在 signalfd_siginfo.ssi_uid 字段中捕获发送 pid。
猜你喜欢
  • 1970-01-01
  • 2011-04-16
  • 2021-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-27
  • 2019-04-11
  • 1970-01-01
相关资源
最近更新 更多