如何杀死一个无法被杀死的任务(不可中断?)

如何杀死一个无法被杀死的任务(不可中断?)

我正在运行一个阻止 pm-hibernate 的任务(在 Linux 4.0.7-2 上)。当我尝试 pm-hibernate 时,出现错误消息“冻结任务在 20.002 秒后失败(1 个任务拒绝冻结,wq_busy=0):”并显示任务。

该进程是一个死进程,几小时前就被杀死了。为什么 root 不能直接将其从内核中删除?我感觉就像在Windows下一样!

我看过类似的相关问题如何杀死一个不重启就无法杀死的进程?但似乎没有令人满意的答案。

一些信息(31207是pid):

# cat /proc/31207/syscall
11 0x7fe482a47000 0x25fce 0x7fe481d4eb78 0x1 0x7fe482a6e700 0x25f2d30     0x7ffca8d8c278 0x7fe481a95ae7
# ps -l -p 31207
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 D  1001 31207     1  0  80   0 -  5035 lock_e pts/9    00:00:00 a.out
# ps -lnp 31207
F S   UID   PID  PPID  C PRI  NI ADDR SZ  WCHAN TTY        TIME CMD
0 D  1001 31207     1  0  80   0 -  5035 ffffff pts/9      0:00 /tmp/a.out
# ps opid,wchan:42,cmd -p 31207
 PID WCHAN                                      CMD
31207 lock_extent_bits                           /tmp/a.out

那么,为什么我不能阻止它呢? 暂停一下就够了!

我没有使用网络文件系统,任务是访问网络的简单任务。如果您能读到此内容,则网络仍然正常。

答案1

处于状态 D(不可中断睡眠)的进程在处于此状态时无法被终止。 NFS 因这个问题而臭名昭著,但还有其他方法会导致进程卡住。损坏的设备驱动程序不将控制权返回给调用进程也可能导致此行为。人们需要重置驱动程序,但通常没有办法做到这一点。我不想这么说:除了重新启动之外别无他法。

相关内容