我有一个VirtualBox进程,我试图杀死它(-KILL / -ABORT),但没有成功。父pid是1(init)。
top
将过程显示为D
,记录为“不间断睡眠”。
strace
没有显示任何内容。
我怎样摆脱这个?它阻止我卸载vbox内核驱动程序以加载更新的驱动程序。
答案 0 :(得分:42)
简单回答:你做不到。
更长的答案:不间断的睡眠意味着这个过程不会被信号唤醒。它只能被它所等待的东西唤醒。当我遇到这种情况时,例如。使用CD-ROM,我通常使用suspend-to-disk重新启动计算机并恢复。
答案 1 :(得分:17)
D状态基本上意味着进程正在等待磁盘I / O或其他无法中断的块I / O.有时这意味着内核或设备正在疯狂地尝试读取坏块(特别是来自光盘)。有时它意味着还有别的东西。
在进入D状态之前,不能杀死该进程。找出它正在等待和解决的问题。简单的方法是重启。有时删除有问题的磁盘会有所帮助,但这可能相当危险:如果您不知道自己在做什么,就会发生无法修复的灾难性硬件故障(读取:冒出来的烟雾)。
答案 2 :(得分:17)
杀死一个不间断的过程成功,它不会立即这样做。该过程不会消失,直到它实际收到信号。所以单独发送信号不足以摆脱这个过程,你也必须从不间断的睡眠中唤醒它。
Tanel Poder写了一篇很棒的guide to analyse D state processes。这种状态通常是由不完整的I / O引起的,例如,网络故障。 slm发布了一些very useful pointers on superuser如何解除网络I / O,以及问题本身。
就个人而言,当在VirtualBox上处理Windows时,甚至在使用wine时,我经常遇到这个问题,因为cdrom I / O永远不会完成(我想它的某种光盘存在检查)。 ATA devices can be reset,可能会解开这个过程。例如,我使用以下小脚本重置我的光驱,取消对它们阻塞的进程的干扰:
echo 1 > /sys/block/sr0/delete
echo 1 > /sys/block/sr1/delete
echo "- - -" > /sys/class/scsi_host/host7/scan
答案 3 :(得分:3)
我最近在远程服务器上遇到D
状态的进程,并希望澄清需要硬重启或重启才能删除该进程。
在耗尽所有其他选项之前,请勿尝试软重启。例如,您可以尝试释放流程所依赖的任何资源。软重启可能会为您提供一个部分关闭的系统,它将不再响应ssh,但不会重新启动,因为它挂起试图终止不间断进程。
答案 4 :(得分:1)
正如其他人所说,不间断进程是一个陷入内核函数的进程,它不能被中断(通常是等待一些I / O操作)。有关详细说明,请参阅this answer。
除了重新启动计算机外,我还成功地通过flushing linux VM caches将某些进程从D
状态移出:
kill -9 {process_id}
sync
echo 3 | sudo tee /proc/sys/vm/drop_caches
这似乎不会影响系统稳定性,但我不是系统程序员,也不确定这可能会产生什么样的意外后果。
修改强>:
根据kernel docs,drop_caches
似乎在开发环境中相当安全。
<强> drop_caches 强>
写入此内容将导致内核删除干净的缓存,以及 可回收的板坯对象,如dentries和inode。一旦掉线,他们的 记忆变得自由。
释放pagecache:
echo 1 > /proc/sys/vm/drop_caches
要释放可回收的slab对象(包括dentries和inode):
echo 2 > /proc/sys/vm/drop_caches
释放slab对象和pagecache:
echo 3 > /proc/sys/vm/drop_caches
这是一种非破坏性操作,不会释放任何脏物。 要增加此操作释放的对象数,用户可以运行 `同步&#39;在写入/ proc / sys / vm / drop_caches之前。这将最小化 系统上的脏对象数量,并创建更多的候选对象 丢弃。
此文件不是控制各种内核缓存增长的方法 (inode,dentries,pagecache等...)这些对象是自动的 内核在系统其他地方需要内存时回收。
使用此文件可能会导致性能问题。因为它丢弃缓存 对象,重新创建它可能需要大量的I / O和CPU 丢弃的物体,特别是如果它们被大量使用。因为这, 建议不要在测试或调试环境之外使用。
当此文件存在时,您可能会在内核日志中看到信息性消息 使用:
cat (1234): drop_caches: 3
这些仅供参考。他们并不是说任何事情都是错的 与您的系统。要禁用它们,请将4(第3位)回显到drop_caches。
答案 5 :(得分:0)
这里不是新手,但没有经历过,但是我遇到了同样的问题,当我使用htop检查其状态时,我的进程将进入不间断睡眠(D状态)。 由于某些原因,
kill -9 <pid>
为我工作。也许您可以尝试相同的方法。
编辑:详细的答案在ostrokach那里(我没有看到)。