Linux 编程接口说:
TASK_KILLABLE:此状态类似于 TASK_UNINTERRUPTIBLE ,但如果出现以下情况,则会唤醒进程:致命信号(即,会终止进程的一个)被接收。通过将内核代码的相关部分转换为使用此状态,可以避免挂起进程需要系统重新启动的各种情况。相反,可以通过向进程发送致命信号来终止该进程。第一段要转换为使用 TASK_KILLABLE 的内核代码是 NFS。
致命信号可以唤醒处于 TASK_KILLABLE 状态的进程,但不能唤醒处于 TASK_UNINTERRUPTIBLE 状态的进程。
致命信号是否仅意味着 SIGKILL,还是还意味着 SIGTERM、SIGHUP、SIGQUIT、SIGINT 或 ...?
答案1
默认情况下,大多数信号都是致命的。任何信号列出默认操作“终止”或“转储核心”是致命的,除非它被忽略或显式处理。这包括诸如、 当然SIGUSR1
还有等“良性”信号。SIGKILL
SIGTERM
这与 Linux 内核相匹配定义致命信号;对于致命信号:
- 它不能是被忽略的信号之一(从内核的角度来看)或停止信号之一,IE分别
SIGCONT
,SIGCHLD
,SIGWINCH
, 和SIGURG
一方面,并且SIGSTOP
、SIGTSTP
、SIGTTIN
、 以及SIGTTOU
另一方面; - 它的信号处理程序必须是默认处理程序。
因此,致命信号会导致进程被终止(不通过正在运行的程序指定的处理程序)。