我们有一个守护程序服务器程序,它会分叉一个孩子。当孩子退出时,家长正在收到SIGTERM
信号。所以,我们想知道
1)谁发送了此SIGTERM
?
2)SIGTERM
是仅针对父母还是其群体?
3)在这种情况下可以生成SIGTERM
的可能方式是什么?
4)是否可以屏蔽此SIGTERM
信号?如果是,这次电话的副作用是什么?
答案 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/构建的,不知道是什么版本添加它