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

标签 linux process signals handler

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

最佳答案

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

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

The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored.

如果有足够的决心,可以下载 Linux 内核源代码并对其进行更改以执行他们喜欢的任何操作。但我不建议允许 SIGKILL 被捕获,如果有人这样做,我也不会称之为“安全”。您可能最终不得不重置硬件以使进程停止。

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

或者(捕捉 SIGKILL),您可能还需要考虑让一个进程等待以检测目标进程是否退出。例如,父进程可以从退出的子进程中寻找 SIGCHLD 信号,然后有效地导致发生您希望在信号处理程序中执行的相同事件。

关于linux - 进程 sighandler 可以处理 linux 信号 SIG_KILL 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42456670/

相关文章:

c++ - 使 system() 产生的子进程在父进程收到终止信号并退出后继续运行

c# - 无法启动多个进程 (C#)

c - 所有 POSIX/SUS 信号都是 #define 是给定的还是假设的?

linux - 在 Linux 中将时间添加到日历日期会给出不正确的结果

c - 如何从c中的POSIX消息队列中删除或清除所有消息?

java - 如何在 Ubuntu Linux 中安装 Amazon Corretto?

shell - 交互式 shell 在孤立进程组中应该做什么?

linux - 在 Linux Mint 16 上查询 hadoop

linux - 在 unix 中执行 "jobs"命令时,+ 和 - 符号表示什么?

pointers - 操作系统如何在不检查所有指针地址的情况下确定空指针访问?