进程永久卡在 D 状态 [关闭]

Posted

技术标签:

【中文标题】进程永久卡在 D 状态 [关闭]【英文标题】:Process permanently stuck on D state [closed] 【发布时间】:2013-12-23 18:46:05 【问题描述】:

我遇到了一些在 Ubuntu 10.04.3 LTS 上卡在 D 状态的进程的问题。

他们从 11 月 5 日(今天是 12 月 6 日)开始一直处于这种状态。我知道这些是不间断的睡眠状态,通常与等待来自硬盘等硬件的数据有关。这是一个生产服务器,所以重启是最后的手段,有没有人能够阐明这些过程可能是什么?

这是来自ps -aux 的 D 状态项的输出

www-data 22851  0.0  0.0      0     0 ?        D    Nov05   0:00 [2637.64]
www-data 26306  0.0  0.0   4008    12 ?        D    Nov05   0:00 ./2.6.37
www-data 26373  0.0  0.0   4008    12 ?        D    Nov05   0:00 ./n2
www-data 26378  0.0  0.0   4008    12 ?        D    Nov05   0:00 ./n2

这是ps axl | awk '$10 ~ /D/' 的输出以获取更多信息。

0    33 22851     1  20   0      0     0 econet D    ?          0:00 [2637.64]
1    33 26306     1  20   0   4008    12 ec_dev D    ?          0:00 ./2.6.37
1    33 26373     1  20   0   4008    12 ec_dev D    ?          0:00 ./n2
1    33 26378     1  20   0   4008    12 ec_dev D    ?          0:00 ./n2

有没有办法杀死这些?重新启动时处于此状态的进程是否会导致任何问题?

【问题讨论】:

恕我直言,提出这个问题并不是一件好事。您必须将其转移到 ***。 【参考方案1】:

这是进程可怕的不可中断 (TASK_UNINTERRUPTIBLE) 状态。这是进程在开始等待完成之前不对信号做出反应的状态。 不幸的是,这是一种必要的邪恶。请参阅here 和此处What is an uninterruptable process?。

我的回答是重启系统。 重新启动会导致任何问题吗? 很难说,它可能它可能不是。处于 D 状态的进程可能需要进行一些重要的更新,如果重新启动则不会。 如果实在无法重启,尝试找到进程正在等待的磁盘,通过打开、关闭、读/写来查看磁盘是否工作正常

【讨论】:

【参考方案2】:

不——你不能杀死他们,期间。 kill -9 也不起作用。这不是内核错误,而是设计使然。所有信号都被阻塞,直到这些进程离开 D 状态。他们要么离开 D 状态,要么系统重新启动。不,重启对这些家伙没有任何问题。

此类问题的常见罪魁祸首是可移动媒体设备,例如 cdrom。设备可能有缺陷,或者有人找到了一种愚蠢的方法。

【讨论】:

不,如果它不能从“D”状态伸出,虽然有可能(就像在windows中一样),这显然是不正常的。如果它是设计使然,那么它就是一个错误的设计。虽然多年来我没有发现这样的问题,但在那之前给我带来了很多麻烦。我认为,内核人员在大多数情况下都解决了这个问题。是的,重启会有所帮助 - 至少在下一个“D”状态问题之前。 也许我不明白你的意思,但是包括 SIGKILL 在内的所有信号都被内核故意阻止来自现代 Linux 中的任何状态“D”进程。这是一件好事。因为进程正在等待驱动程序,而驱动程序正在硬件上等待。 因此一个简单的、可解决的硬件或锁定问题将升级为一个大问题,需要重新启动。而内核人们甚至不明白,这是一个……一个……对事物的次优处理。 @jimmcnamara 如果当时不存在硬件,那就太愚蠢了。如果是内核作者发布这个答案,我会给这个 -1。 现在是 2019 年,“必要的邪恶”仍然存在。太尴尬了。

以上是关于进程永久卡在 D 状态 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Mac App SQLDeveloper在应用程序关闭后卡在Dock中,进程被杀死

ubuntu卡在登陆界面循环登陆如何解决?

如何永久关闭 QQ 逼你安装“安全防护更新进程”的窗口?

VC做一个监控进程,该进程需要定时获取被监控的进程的状态,如果被监控的进程关闭了,就重新启动之

查看后台运行的命令 、进程状态、关闭前后台命令

linux进程D状态_转