linux - 信号如何无法捕获(例如 sigkill)? Linux 的底层到底发生了什么?

标签 linux process signals

我知道有可捕获和不可捕获的信号。然而,两种类型的信号似乎都由操作系统发送到进程。是什么使得无法捕获的信号无法捕获?是否是信号处理程序捕获信号,并且由于没有编写信号处理程序来处理特定信号(例如 sigkill),因此它变得无法捕获?如果这是真的,我是否可以得出结论,可以通过编写信号处理程序来捕获无法捕获的信号?

最佳答案

不,您无法捕获无法捕获的信号,因为它始终由内核实现的默认处理程序捕获。 SIGKILL 始终终止进程。即使进程尝试通过注册处理程序来处理 SIGKILL 信号,控件仍然会始终落在默认 SIGKILL 处理程序中,这将终止程序。 这就是当您尝试关闭系统时会发生的情况。 首先,系统向所有进程发送一个 SIGTERM 信号,并等待一段时间,为这些进程提供一个宽限期。如果过了宽限期仍然没有停止,系统会使用SIGKILL信号强制终止所有进程。

关于linux - 信号如何无法捕获(例如 sigkill)? Linux 的底层到底发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26390564/

相关文章:

c - 退出程序会不会自动关闭管道?

使用 kill 函数创建僵尸进程

c# - File.Delete 无法删除文件,因为该文件正在被另一个进程使用。不知道如何解决这个问题

audio - 高中心频率的IIR滤波器系数

C 使用IPC消息队列的信号使用及处理

perl - 我如何编写一个不在 eval block 中触发的 SIG{__DIE__} 处理程序?

linux - 使用 Linux 命令行从 WAV/RIFF 获取频谱

linux - 有没有办法找出使用 Linux 内核模块的内容?

linux - 如何避免 cmake 读取其 "system cache"$HOME/.cmake/

linux - 如何从文件中添加对话框菜单项?