信号如何无法捕获(例如sigkill)?在linux的引擎下发生了什么?

时间:2014-10-15 19:29:27

标签: linux process signals

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

1 个答案:

答案 0 :(得分:2)

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