@(Linux基础)[僵尸进程处理]

今天在服务器上推送项目的时候,突然发现很卡。就用top查看了一下,果然此事不简单啊。

top - 10:39:16 up 20 days, 23:11,  2 users,  load average: 1.13, 1.09, 1.03
Tasks: 204 total, 2 running, 196 sleeping, 1 stopped, 5 zombie
Cpu(s): 22.2%us, 1.9%sy, 0.0%ni, 73.2%id, 1.6%wa, 0.0%hi, 0.0%si, 1.2%st
Mem: 6122764k total, 5311160k used, 811604k free, 785232k buffers
Swap: 2046972k total, 168792k used, 1878180k free, 2787720k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
18715 root 20 0 245m 58m 6692 R 31.3 1.0 0:00.94 python
21231 root 20 0 538m 96m 7180 S 1.0 1.6 208:55.76 gunicorn
21237 root 20 0 538m 96m 7272 S 1.0 1.6 208:47.87 gunicorn
21229 root 20 0 539m 97m 7352 S 0.7 1.6 208:57.03 gunicorn
21240 root 20 0 539m 96m 7368 S 0.7 1.6 208:42.90 gunicorn
2239 rabbitmq 20 0 3768m 69m 2764 S 0.3 1.2 46:00.09 beam.smp
18681 root 20 0 17172 1364 964 R 0.3 0.0 0:00.01 top
18724 root 20 0 121m 7448 5320 S 0.3 0.1 0:00.01 nginx
1 root 20 0 21404 1064 848 S 0.0 0.0 0:02.10 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd

注意:zombie 僵尸进程而且还是5个。

此时此刻,只想说这些这帮人捣乱玩。

解决办法:

在linux中,利用命令ps,可以看到有标记为Z的进程就是僵尸进程。

ps -ef|grep defunc可以找出僵尸进程.

可以用ps的-l选项,得到更详细的进程信息. F(Flag):一系列数字的和,表示进程的当前状态。这些数字的含义为:

00:若单独显示,表示此进程已被终止。
  01:进程是核心进程的一部分,常驻于系统主存。如:sched、 vhand 、bdflush 等。
  02:Parent is tracing process.
  04:Tracing parent’s signal has stopped the process; the parent is waiting ( ptrace(S)).
  10:进程在优先级低于或等于25时,进入休眠状态,而且不能用信号唤醒,例如在等待一个inode被创建时   
  20:进程被装入主存(primary memory)
  40:进程被锁在主存,在事务完成前不能被置换   S(state of the process )   O:进程正在处理器运行 
  S:休眠状态(sleeping)
  R:等待运行(runable)   
  I:空闲状态(idle)
  Z:僵尸状态(zombie)   
  T:跟踪状态(Traced)
  B:进程正在等待更多的内存页
  C:cpu利用率的估算值(cpu usage)

处理僵尸进程

kill -18 PPID (PPID是其父进程)

 这个信号是告诉父进程,该子进程已经死亡了,请收回分配给他的资源。

 SIGCONT也是一个有意思的信号。如前所述,当进程停止的时候,这个信号用来告诉进程恢复运行。该信号的有趣的地方在于:它不能被忽略或阻塞,但可以被捕获。缺省行为是丢弃该信号。

终止父进程

 如果方法2不能终止,可采用终止其父进程的方法(如果其父进程不需要的话)父进程死后,僵尸进程成为”孤儿进程”,过继给1号进程init,init始终会负责清理僵尸进程.它产生的所有僵尸进程也跟着消失。

先看其父进程又无其他子进程,如果有,可能需要先kill其他子进程,也就是兄弟进程。方法是:

  kill –15 PID1 PID2 (PID1,PID2是僵尸进程的父进程的其它子进程)。

然后再kill父进程:kill –15 PPID

这样僵尸进程就可能被完全杀掉了。

linux对于zombie的处理的更多相关文章

  1. Linux 驱动开发

    linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...

  2. Linux 的僵尸(zombie)进程

    可能很少有人意识到,在一个进程调用了exit之后,该进程 并非马上就消失掉,而是留下一个称为僵尸进程(Zombie)的数据结构.在Linux进程的5种状态中,僵尸进程是非常特殊的一种,它已经放弃了几乎 ...

  3. linux zombie process相关学习

    1. zombie process是什么? zombie process是那些在系统中已经死掉的process, 通过ps -A | grep defunct可以查看系统中有多少zombie proc ...

  4. linux 杀掉僵尸进程 (zombie process, defunct)

    本文说明为什么会出现僵尸进程 (zombie process, defunct),以及如何杀掉僵尸进程 1. 为什么有僵尸进程 僵尸进程出现在父进程没有回收子进程的 PCB 的时候,这个时候子进程已经 ...

  5. linux的top命令参数详解

    简介 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器. top显示系统当前的进程和其他状况,是一个动态显示过程,即可以通过用户按 ...

  6. 萌新笔记——linux下查看内存的使用情况

    windows上有各种软件可以进行"一键加速"之类的操作,释放掉一些内存(虽然我暂时不知道是怎么办到的,有待后续学习).而任务管理器也可以很方便地查看各进程使用的内存情况,如下图: ...

  7. 第12章 Linux系统管理

    1. 进程管理 1.1 进程查看 (1)进程简介 进程是正在执行的一个程序或命令(如ls命令也是一个进程),每个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源. (2)进程管理的作用 ...

  8. Linux命令:ps,netstat,top

    ps ps用于查看当前运行的进程.如果想查看动态的进程信息,可以使用top命令.查看详细命令帮助使用man ps. ps最常用的选项组合就是ps aux: # ps aux USER PID %CPU ...

  9. Linux进程管理及while循环

    目录 进程的相关概念 进程查看及管理工具的使用 Linux系统作业控制 调整进程优先级 网络客户端工具 bash之while循环 20.1.进程类型 守护进程 daemon,在系统引导过程中启动的进程 ...

随机推荐

  1. Reportng 的测试报告在 Jenkins 中显示不全

    通过Jenkins执行接口测试生成测试报告,用Jenkins的web服务打开html显示不全. 环境: Jenkins版本:1.651.2 Jenkins发布在mac上面 使用的是testng管理测试 ...

  2. jQuery 隐藏和显示

    jQuery 隐藏和显示 通过 hide() 和 show() 两个函数,jQuery 支持对 HTML 元素的隐藏和显示: 实例 $("#hide").click(functio ...

  3. linux 系统的ssh服务

    ssh服务由服务端软件Openssh和客户端(常见的有ssh,SecureCRT,putty,xshell)组成,ssh服务默认使用22端口提供服务,它有两个不兼容的ssh协议版本,分别是1.x和2. ...

  4. Qt中QBitmap 的使用 --QBitmap的作用

    特别注意:如果想把做一个先把图画在内存中,在显示到页面,不要使用bitmap,这个只有单色: 一般情况下QBitmap只作为图片掩码使用,比如做不规则窗口. QBitmap表示一种只有黑白的单色图片, ...

  5. kubernetes dashboard 安装

    环境:CentOS Linux release 7.3.1611 (Core)IP:192.168.0.103 [1]组件安装yum install device-mapperyum install ...

  6. Kotlin 函数

    至于什么函数,在计算机里面就是一个密闭的执行程序的代码块(个人理解) 我们先来看看什么是函数 fun main(agrs : Array<String>) { println(" ...

  7. MarkdownPad基于语法示例

    博客园 [有道] (https://www.zybuluo.com/mdeditor#) [Markdown语法教学链接] (https://www.cnblogs.com/chimoxuanzhi/ ...

  8. Mybatis 的动态 SQL 语句

    <if>标签 我们根据实体类的不同取值,使用不同的 SQL 语句来进行查询. 比如在 id 如果不为空时可以根据 id 查询, 如果 username 不同空时还要加入用户名作为条件.这种 ...

  9. ES聚合报错

    在测试Elasticsearch聚合的时候报了一个错误.具体如下: GET /megacorp/employee/_search { "aggs": { "all_int ...

  10. C# Winform下一个热插拔的MIS/MRP/ERP框架(多语言方案)

    个别时候,我们需要一种多语种切换方案. 我的方案是这样的: 1.使用文本文本存储多语言元素,应用程序启动时加载到内存表中: 2.应用程序启动时从配置文件加载语种定义: 3.所有窗体继承自一个Base基 ...