运行在 KVM 虚拟机里的一些进程突然出了问题,这些出了问题的进程无法用 kill 杀掉,使用 ps 可以看到这些进程处于D 状态:

[build@kbuild-john ~]$ ps -a -ubuild -o pid,ppid,stat,commandPID PPID STAT COMMAND17009 1 Ds -bash17065 1 D ls --color=tty -al17577 1 D /usr/java/jdk1.5.0_17/bin/java -Xmx512m -classpath /usr/local/a17629 1 D /usr/java/jdk1.5.0_17/bin/java -Xmx512m -classpath /usr/local/a

ps 的手册里说 D 状态是 uninterruptible sleep,Linux 进程有两种睡眠状态,一种 interruptible sleep,处在这种睡眠状态的进程是可以通过给它发信号来唤醒的,比如发 HUP 信号给 nginx 的 master 进程可以让 nginx 重新加载配置文件而不需要重新启动 nginx 进程;另外一种睡眠状态是 uninterruptible sleep,处在这种状态的进程不接受外来的任何信号,这也是为什么之前我无法用 kill 杀掉这些处于 D 状态的进程,无论是 kill, kill -9 还是 kill -15,因为它们压根儿就不受这些信号的支配。

进程为什么会被置于 uninterruptible sleep 状态呢?处于 uninterruptible sleep 状态的进程通常是在等待 IO,比如磁盘 IO,网络 IO,其他外设 IO,如果进程正在等待的 IO 在较长的时间内都没有响应,那么就很会不幸地被 ps 看到了,同时也就意味着很有可能有 IO 出了问题,可能是外设本身出了故障,也可能是比如挂载的远程文件系统已经不可访问了,我这里遇到的问题就是由 down 掉的 NFS 服务器引起的。

正是因为得不到 IO 的相应,进程才进入了 uninterruptible sleep 状态,所以要想使进程从 uninterruptible sleep 状态恢复,就得使进程等待的 IO 恢复,比如如果是因为从远程挂载的 NFS 卷不可访问导致进程进入 uninterruptible sleep 状态的,那么可以通过恢复该 NFS 卷的连接来使进程的 IO 请求得到满足,除此之外,要想干掉处在 D 状态进程就只能重启整个 Linux 系统了。

看到有人说如果要想杀掉 D 状态的进程,通常可以去杀掉它的父进程(通常是 shell,我理解的这种情况是在 shell 下直接运行的该进程,之后该进程转入了 D 状态),于是我就照做了,之后就出现了上面的状态:他们的父进程被杀掉了,但是他们的父进程 PID 都变成了1,也就是 init 进程,这下可如何是好?此时我这些D状态的进程已经影响到其他一些进程的运行,而已经无法访问的 NFS 卷又在段时间内无法恢复,那么,只好重新启动了,root 不是玉皇大帝,也有无奈的时候。

跟 czhang 说起这个事,觉得 Linux 如果有这么一个专用的垃圾回收进程就好了:系统自动或者用户手动把僵尸进程,和比如之前我遇到的 D 状态进程的 PPID 设为这个垃圾回收进程,那么通过干掉这个垃圾回收进程来清理这些僵尸们,这样该有多美好…

linux 进程 D 状态,Linux 进程的 Uninterruptible sleep(D) 状态相关推荐

  1. Linux 进程的 Uninterruptible sleep(D) 状态

    首先,说一下产生D状态的原因. 上图阐释了一个进程运行的情况,首先,运行的时候,进程会向内核请求一些服务,内核就会将程序挂起进程,并将进程放到parked队列,通常这些进程只会在parked队列中停留 ...

  2. linux 进程几种状态,linux进程状态

    linux系统最常用的命令莫过于ps,经常要用其查看linux的进程和线程情况.此文我们着重来看进程 .进程又分为以下几种状态: 1. 运行(正在运行或在运行队列中等待) 2. 中断(休眠中, 受阻, ...

  3. linux php d 含义,Linux中状态为D 或Z 的进程

    长期生活在 Linux 环境里,渐渐地就有一种环保意识油然而生.比如,我们会在登录提示里写上"悟空,我跟你说过叫你不要乱扔东西,乱扔东西是不对的.哎呀我话没说完你怎么把棍子扔掉了?月光宝盒是 ...

  4. linux检查是否有D进程,Linux内核调试技术——进程D状态死锁检测

    Linux的进程存在多种状态,如TASK_RUNNING的运行态.EXIT_DEAD的停止态和 TASK_INTERRUPTIBLE的接收信号的等待状态等等(可在include/linux/sched ...

  5. 【Linux 内核】进程管理 ( Linux 中进程的 CPU 资源调度 | 进程生命周期 | 创建状态 | 就绪状态 | 执行状态 | 阻塞状态 | 终止状态 | 进程生命周期之间的转换 )

    文章目录 一.Linux 中进程的 CPU 资源调度 二.进程生命周期 三.进程生命周期之间的转换 一.Linux 中进程的 CPU 资源调度 Linux 操作系统 是 多任务系统 , 可以 同时运行 ...

  6. Linux系统编程11:进程入门之详细阐述进程的一些状态区分僵尸状态和孤儿状态动图演示

    文章目录 (1)几个重要的状态 A:R(running)-运行状态 B:S(sleeping)-睡眠状态 C:D(Disk sleep)-磁盘休眠状态 D:T(stopped)-停止 (2)进程状态路 ...

  7. linux进程状态d状态,linux – 进程永久停留在D状态

    我有一个问题,在Ubuntu 10.04.3 LTS上陷入D状态的某些进程. 自11月5日(今天是12月6日)以来,他们一直处于这种状态.我知道这些是不间断的睡眠状态,通常与等待来自硬盘等硬件的数据有 ...

  8. linux中的进程有哪三种基本状态,Linux下的进程有哪三种状态?()

    1.R (TASK_RUNNING)状态,可执行状态. 只有在该状态的进程才可能在CPU上运行.而同一时刻可能有多个进程处于可执行状态,这些进程的task_struct结构(进程控制块)被放入对应CP ...

  9. linux进程僵停状态,Linux操作系统中进程的七种状态

    1 Linux中进程的七种状态(1)R运行状态(runing):并不意味着进程一定在运行中,也可以在运行队列里:(2)S睡眠状态(sleeping):进程在等待事件完成:(浅度睡眠,可以被唤醒)(3) ...

  10. Linux x86_64内核终止D状态的进程

    在上一篇文章< Linux x86内核终止D状态的进程>中,我展示了32位x86系统中如何编码杀死D进程.本文我将展示一种64位x86系统上的方法.         说实话,64位系统上做 ...

最新文章

  1. 有生之年,人工智能会给世界带来什么变化?这里是现代机器人之父Rodney Brooks关于未来的预言
  2. BZOJ2888 : 资源运输
  3. 两个形状不同的长方形周长_“解决问题——怎样围周长最短”教学思考与设计...
  4. 第二课--字符串类型及操作
  5. 为什么SAP GUI里的传统事务码能通过Fiori Launchpad启动
  6. 使用.NET类库操作CSV文件
  7. Jeecg 文件上传漏洞补丁说明
  8. php redirect with post,试图理解Post / Redirect / Get设计模式(用PHP实...
  9. VMware VCSA6.0的部署及升级到6.5
  10. practical of programming 第二章 java的quick sort
  11. codeblocks中文编码问题
  12. Makefile 文件怎么写
  13. Dubbo 分布式事务一致性实现
  14. 【leetcode】栈(python)
  15. gcc警告: warning: dereferencing type-punned pointer will break strict-aliasing rules
  16. ies文件 vray_光域网ies文件免费
  17. ireport分组打印
  18. 每日一个CSS——模拟键盘
  19. 会员注册与验证码demo 带注释(html、css、js)
  20. fatal detected dubious ownership in repository at解决办法

热门文章

  1. 5分钟了解分页的那些事?
  2. 高可用eureka服务发现实例
  3. ubuntu/Windows双系统,在ubuntu隐藏window分区的方法
  4. iOS 网络与多线程--3.异步Get方式的网络请求(非阻塞)
  5. Learning Cocos2d-x for WP8(4)——中文显示
  6. iOS开发基础 - UIDataDetectorTypes
  7. [译]Chipmunk教程 - 5 跟踪球体的运动
  8. 2021最新SSM博客,功能完善,初云博客增强版
  9. 算法学习——递归和排列组合
  10. STC学习:导航按键