如何杀死一个 TASK_KILLABLE 进程?

How to kill a TASK_KILLABLE process?

如果一个进程在 TASK_KILLABLE 状态下休眠,我们可以通过向它发送信号 'SIGKILL' 来杀死它。

"kill -9 pid" 将在 'task_struct->signal->shared_pending' 中设置 sig,然后唤醒进程。

但是,wait_event_killable 只检查“task_struct->挂起”以查看是否有致命信号挂起。(__fatal_signal_pending)

因此,kill -9 无法杀死 KILLABLE 进程。

如何终止 TASK_KILLABLE 进程?

首先,与大多数 Unix 版本一样,Linux 有两种使进程休眠的基本方法。

处于 TASK_INTERRUPTIBLE 状态的进程将休眠,直到 (1) 明确唤醒它,或 (2) 收到非屏蔽信号。

TASK_UNINTERRUPTIBLE 状态相反,忽略信号;处于该状态的进程将需要显式唤醒才能再次 运行。

TASK_KILLABLE是来自TASK_UNINTERRUPTIBLE的task_struct状态,但可以通过信号唤醒。

所以,我认为这个进程如果设置为 TASK_KILLABLE 是可以终止的。这里有一些source可以帮助你深入理解。