进程永久卡在 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中,进程被杀死