在C语言中查找发送信号的进程

3

我有一个子进程,可能会收到来自其父进程或其他地方的sigterm信号。如果信号来自父进程,我必须采取适当的措施。在c(linux)中,如何确定接收到的信号是来自父进程?


实际上,我刚意识到你在问关于SIGKILL的事情。没有办法做到你想要的。如果子进程收到了SIGKILL信号,那么它就已经死亡了,故事结束。 - Duck
SIGKILL无法被捕获。 SIGKILL信号会发送到进程以立即终止(杀死)该进程。与SIGTERM和SIGINT相比,此信号无法被捕获或忽略,并且接收进程在接收此信号时无法执行任何清理工作。http://en.wikipedia.org/wiki/Unix_signal - mSatyam
抱歉,这是 SIGTERM 错误。我已经编辑过了。 - user1762571
1个回答

3
你可以使用 sigaction 函数并使用 SA_SIGINFO 标志来设置信号处理程序。你的处理程序将接受一个参数 siginfo_t。在 siginfo_t 结构体中有一个名为 si_pid 的字段。这是发送进程的进程 ID。将其与子进程的 ppid() 进行比较。

我们已经使用了signal()来捕获信号。有没有不使用sigaction的方法来找到进程? - user1762571
1
当然,如果适合您的情况,您可以使用诸如sigwaitinfosigtimedwait等替代方法。但据我所知,从siginfo_t结构中获取pid是唯一的方法。此外,由于这是Linux,还有signalfd,它将在signalfd_siginfo.ssi_uid字段中捕获发送pid(类似地)。 - Duck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接