如何阻止Linux上的“不间断”进程?

时间:2009-04-20 09:29:04

标签: linux

我有一个VirtualBox进程,我试图杀死它(-KILL / -ABORT),但没有成功。父pid是1(init)。

top将过程显示为D,记录为“不间断睡眠”。

strace没有显示任何内容。

我怎样摆脱这个?它阻止我卸载vbox内核驱动程序以加载更新的驱动程序。

6 个答案:

答案 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 docsdrop_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那里(我没有看到)。