linux信号SIG_KILL可以由进程sighandler处理吗?

时间:2017-02-25 13:27:20

标签: linux process signals handler

旧方式“信号”和新方式“sigaction”:我们的程序可以安全地处理SIG_KILL吗?这个不同的linux内核版本有区别吗?我试图从2.6.30升级到更高版本,从开发角度来看,可以安全地处理这个SIG_KILL吗?

1 个答案:

答案 0 :(得分:1)

没有。正如Matteo Piano指出的那样,我们不应该使用信号处理程序来处理SIGKILL。除非我们讨论的是错误版本或其他非标准版本,否则不同内核版本在这方面应该没有区别。

来自man 7 signal的“标准信号”部分:

  

无法捕获,阻止或忽略信号SIGKILL和SIGSTOP。

如果确定了一个,那么可以下载Linux内核源代码并将其更改为他们想做的任何事情。但是我不建议允许SIGKILL被捕,如果有的话,我不会称之为“安全”。您最终可能需要进行硬件重置才能使进程停止。

由于您未在问题中指明为什么要捕获SIGKILL, 您可能需要考虑使用其他信号,例如SIGHUPSIGINTSIGQUIT。这些其他信号可能正在被处理,而一些Unix / Linux程序就是这样做的。

或者(为了捕获SIGKILL),您可能还需要考虑让流程坐下来检测目标进程是否退出。例如,父进程可以从子进程中查找SIGCHLD信号,然后有效地导致您希望在信号处理程序中发生相同的事件。