我正在运行一个阻止 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 因这个问题而臭名昭著,但还有其他方法会导致进程卡住。损坏的设备驱动程序不将控制权返回给调用进程也可能导致此行为。人们需要重置驱动程序,但通常没有办法做到这一点。我不想这么说:除了重新启动之外别无他法。