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

[build@kbuild-john ~]$ ps -a -ubuild -o pid,ppid,stat,command

PID  PPID STAT COMMAND

17009     1 Ds   -bash

17065     1 D    ls --color=tty -al

17577     1 D    /usr/java/jdk1.5.0_17/bin/java -Xmx512m -classpath /usr/local/a

17629     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 多进程广播通知,linux进程状态D相关推荐

  1. linux视频广播,在 Linux 终端收听广播

    原标题:在 Linux 终端收听广播 编译自: https://opensource.com/article/18/12/linux-toy-mplayer 作者: Jason Baker 译者: g ...

  2. linux多进程条件变量,Linux 多线程条件变量同步

    条件变量是线程同步的另一种方式,实际上,条件变量是信号量的底层实现,这也就意味着,使用条件变量可以拥有更大的自由度,同时也就需要更加小心的进行同步操作.条件变量使用的条件本身是需要使用互斥量进行保护的 ...

  3. linux多进程spawn,【Linux Shell脚本编程】expect解决脚本交互 + Shell的多进程处理

    如果在没有使用密钥认证的情况下,想通过SSH来传输文件给多个主机会面临交互的问题,这在脚本中是非常不友好的.要解决这个问题的话可以使用expect这个工具,它的功能就是提前把交互中需要的内容先写好,然 ...

  4. linux多进程网络实例,Linux下一个单进程并发服务器的实例 使用select

    /*单进程并发服务器实例.该程序采用单进程并发服务器算法实现的.*/ #include #include #include #include #include #include #include #i ...

  5. HTTP服务器项目2:Linux多进程开发

    HTTP服务器项目2:Linux多进程开发 1.进程概述: 01 / 程序和进程 程序是包含一系列信息的文件,这些信息描述了如何在运行时创建一个进程: ◼ 二进制格式标识:每个程序文件都包含用于描述可 ...

  6. Linux 多进程开发

    Linux多进程开发 文章目录 进程概述 程序与进程 单道.多道程序设计 时间片 并行和并发 进程状态转换 进程的状态 进程相关命令 进程号和相关函数 进程创建 父子进程的虚拟地址空间 父子进程之间的 ...

  7. Linux多进程编程(2)

    简介 IPC(Inter Process Communication,进程间通信)的方式总共有三种,分别是信号量.共享内存和消息队列,本文介绍前两种. 在Linux中,进程之间操作公共数据时,需要进行 ...

  8. Linux 高并发服务器实战 - 2 Linux多进程开发

    Linux 高并发服务器实战 - 2 Linux多进程开发 进程概述 概念1: 概念2: 微观而言,单CPU任意时刻只能运行一个程序 并发:两个队列交替使用一台咖啡机 并行:两个队列同时使用两台咖啡机 ...

  9. 【Linux】进程概念与进程状态

    文章目录 一.什么是进程 1.进程概念 2.进程描述 -- PCB 二.进程的一些基本操作 1.查看进程 2.结束进程 2.通过系统调用获取进程标示符 3.通过系统调用创建子进程 三.进程状态 1.普 ...

最新文章

  1. WIN10 右键 powershell 修改
  2. 语音合成(文字转语音)工具大全
  3. 【学习笔记】Tableau基础介绍
  4. 在linux下搭建jira+svn[原创]
  5. (转)svn检出的时候报 Unable to connect to a repository at URL错误
  6. jQuery如何在线导入js包
  7. OJ1003: 两个整数的四则运算
  8. UVA11219 How old are you?【日期】
  9. python基础补漏-03-函数
  10. P3317 [SDOI2014]重建
  11. 历年系统架构师论文题目总结(2012-2018)
  12. UnRaid配置文件、启动U盘定时备份方案
  13. mini_c编译器的简单代码逻辑
  14. Centos8Web服务器搭建
  15. 第一章 古代东方文明
  16. mindspore详解
  17. 堰流实验报告思考题_水力学思考题 -
  18. 离散数学学习笔记-2-群 子群
  19. 使用 Kubernetes 和 Istio 进行基于容器的全面服务监控
  20. 财务数据中台架构及建设方案(ppt)

热门文章

  1. iFunk,即时享乐不等待
  2. Android实现广告页图片无限轮播
  3. 源码分享 | 一个聚合的今日热榜站
  4. 神舟K580s i7 D0 光驱厚度12.7mm mSATA接口不可用
  5. SpringBoot 中 Json 格式化配置
  6. 数字乡村建设方案智慧乡村建设方案智慧农村解决方案
  7. 负载均衡权重系数算法 C++
  8. Bugku_Misc_悲伤的故事
  9. Linux下实现达梦数据库disql 命令上下翻动
  10. 基于netty-socketio的web聊天--发送图片