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

时间:2010-11-02 13:26:20

标签: c linux unix

我们有一个守护程序服务器程序,它会分叉一个孩子。当孩子退出时,家长正在收到SIGTERM信号。所以,我们想知道

1)谁发送了此SIGTERM

2)SIGTERM是仅针对父母还是其群体?

3)在这种情况下可以生成SIGTERM的可能方式是什么?

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

添加@ 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 +++

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

P.S。我的CentOS(6.0& 6.4)没有它所以我是从http://sourceforge.net/projects/strace/构建的,不知道是什么版本添加它