如何查找谁将sigterm信号发送到我的进程或我的进程组?

Tha*_*raj 3 c unix linux

我们有一个守护程序服务器程序,它会分配一个孩子.当孩子退出时,父母正在接收SIGTERM信号.所以,我们想知道

1)谁发送了这个SIGTERM

2)是否SIGTERM只针对父母或其团体?

3)SIGTERM在这种情况下可以生成哪些可能的方法?

4)是否可以屏蔽此SIGTERM信号?如果是,这次电话的副作用是什么?

小智 5

您需要SA_SIGINFO类型的sig处理程序.然后你将获得包含si_pid的siginfo_t,这是信令进程. http://linux.die.net/man/2/sigaction


nhe*_*hed 5

添加到@rib 的答案:

当前版本的 strace 显示该信息

read(0, 0x7f4ab8353000, 4096)           = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGTERM {si_signo=SIGTERM, si_code=SI_USER, si_pid=1, si_uid=0} ---
+++ killed by SIGTERM +++
Run Code Online (Sandbox Code Playgroud)

我可以看到我的进程被 pid #1(init,即 upstart)杀死了

ps 我的 CentOS(6.0 和 6.4)没有它,所以我从http://sourceforge.net/projects/strace/构建它,不确定是哪个版本添加了它