2017-02-25 61 views
1

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

+0

从'man':_不能阻止SIGKILL或SIGSTOP。企图这样做的尝试被忽略了._ –

回答

1

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

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

的信号SIGKILL和SIGSTOP不能被捕获,阻止或忽略。

如果确定了足够的人,可以下载Linux内核源代码并将其更改为自己想做的任何事情。但我不会建议允许SIGKILL被捕,如果有的话我不会说它是“安全的”。您可能需要做硬件重置才能停止进程。

正如你不要在您的问题具体原因你会想赶上SIGKILL, 你可能要考虑使用其他信号像SIGHUPSIGINTSIGQUIT代替。这些其他信号是为了可能被处理的,一些Unix/Linux程序可以做到这一点。或者(为了捕捉SIGKILL),您可能还需要考虑让一个进程坐下来检测目标进程是否退出。举例来说,一个父进程可能会从退出的子进程中寻找一个SIGCHLD信号,然后有效地导致您希望在信号处理程序中执行的相同事件。