如何杀死 TASK_KILLABLE 进程?

时间:2021-01-07 02:55:35

标签: linux linux-kernel

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

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

但是,wait_event_killable 只检查“task_struct->pending”以查看是否有致命信号正在等待。(__fatal_signal_pending)

因此,kill -9 不能杀死 KILLABLE 进程。

如何杀死 TASK_KILLABLE 进程?

1 个答案:

答案 0 :(得分:1)

首先,与大多数版本的 Unix 一样,Linux 有两种基本方式可以让进程进入睡眠状态。

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

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

TASK_KILLABLE 是 task_struct 的一种状态,它来自 TASK_UNINTERRUPTIBLE,但这可以被信号唤醒。

所以,如果设置为 TASK_KILLABLE,我认为这个进程是可杀死的。以下是一些可以帮助您深入了解的 source