linux 信号 SIG_KILL 可以由进程 sighandler 处理吗?
Could linux signal SIG_KILL be handled by process sighandler?
旧方法"signal"和新方法"sigaction":我们的程序可以安全地处理SIG_KILL吗?不同的 linux 内核版本在这方面有区别吗?我试图从 2.6.30 升级到更高版本,想知道从开发的角度来看,这个 SIG_KILL 可以安全处理吗?
没有。正如 Matteo Piano 指出的那样,我们不应该使用信号处理程序来处理 SIGKILL 。不同内核版本之间在这方面应该没有区别,除非我们谈论的是错误版本或其他非标准版本。
来自 man 7 signal 的 "Standard signals" 部分:
The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored.
如果有足够的决心,可以下载 Linux 内核源代码并对其进行更改以执行他们想要的任何操作。但我不建议让 SIGKILL 被捕获,如果有人这样做,我也不会称它为 "safe"。您可能最终不得不重置硬件以使进程停止。
由于您没有在问题中说明为什么要捕获 SIGKILL,
您可能需要考虑使用其他信号,例如 SIGHUP
、SIGINT
或 SIGQUIT
。这些其他信号可能被处理,一些 Unix/Linux 程序就是这样做的。
或者(捕捉 SIGKILL),您可能还需要考虑让一个进程等待以检测目标进程是否退出。例如,父进程可以从子进程中寻找 SIGCHLD
信号退出,然后有效地导致发生您希望在信号处理程序中执行的相同事件。
旧方法"signal"和新方法"sigaction":我们的程序可以安全地处理SIG_KILL吗?不同的 linux 内核版本在这方面有区别吗?我试图从 2.6.30 升级到更高版本,想知道从开发的角度来看,这个 SIG_KILL 可以安全处理吗?
没有。正如 Matteo Piano 指出的那样,我们不应该使用信号处理程序来处理 SIGKILL 。不同内核版本之间在这方面应该没有区别,除非我们谈论的是错误版本或其他非标准版本。
来自 man 7 signal 的 "Standard signals" 部分:
The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored.
如果有足够的决心,可以下载 Linux 内核源代码并对其进行更改以执行他们想要的任何操作。但我不建议让 SIGKILL 被捕获,如果有人这样做,我也不会称它为 "safe"。您可能最终不得不重置硬件以使进程停止。
由于您没有在问题中说明为什么要捕获 SIGKILL,
您可能需要考虑使用其他信号,例如 SIGHUP
、SIGINT
或 SIGQUIT
。这些其他信号可能被处理,一些 Unix/Linux 程序就是这样做的。
或者(捕捉 SIGKILL),您可能还需要考虑让一个进程等待以检测目标进程是否退出。例如,父进程可以从子进程中寻找 SIGCHLD
信号退出,然后有效地导致发生您希望在信号处理程序中执行的相同事件。