【问题标题】:How to kill a TASK_KILLABLE process?如何杀死 TASK_KILLABLE 进程?
【发布时间】:2021-01-07 02:55:35
【问题描述】:

如果一个进程在 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 进程?

【问题讨论】:

  • 我有点困惑为什么没有回复。如果您对答案有任何问题,请告诉我,以便我们改进。如果对您有帮助,请给我一个有用的赞或接受吗?这对我很重要。

标签: linux linux-kernel


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-21
    • 2019-01-07
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 2013-07-24
    • 1970-01-01
    • 2013-06-01
    相关资源
    最近更新 更多