我们有一个守护程序服务器程序,它分派一个孩子。当孩子退出时,Parent正在收到SIGTERM
信号。所以,我们想知道如何找到谁将sigterm信号发送到我的过程或我的过程组?
1)谁发送这个SIGTERM
?
2)SIGTERM
是否仅限于父母或其团体?
3)在这种情况下可以生成SIGTERM
的可能方式是什么?
4)是否可以掩盖这个SIGTERM
信号?如果是的话,这个电话的副作用是什么?
我们有一个守护程序服务器程序,它分派一个孩子。当孩子退出时,Parent正在收到SIGTERM
信号。所以,我们想知道如何找到谁将sigterm信号发送到我的过程或我的过程组?
1)谁发送这个SIGTERM
?
2)SIGTERM
是否仅限于父母或其团体?
3)在这种情况下可以生成SIGTERM
的可能方式是什么?
4)是否可以掩盖这个SIGTERM
信号?如果是的话,这个电话的副作用是什么?
您需要一个SA_SIGINFO类型的sig-handler。 然后你会得到包含si_pid的siginfo_t,它是信号处理过程。 http://linux.die.net/man/2/sigaction
添加到@肋骨的回答是:
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,即暴发户)
ps我的CentOS(6.0 & 6.4)没有它,所以我建立它从http://sourceforge.net/projects/strace/,不知道什么版本添加它