如何查看系统是否有僵尸进程

描述

  1、查看系统是否有僵尸进程

  使用Top命令查找,当zombie前的数量不为0时,即系统内存在相应数量的僵尸进程。

Linux

  2、定位僵尸进程

  使用命令ps -A -ostat,ppid,pid,cmd |grep -e ‘^[Zz]’定位僵尸进程以及该僵尸进程的父进程。

  3、杀死僵尸进程

  使用Kill -HUP 僵尸进程ID来杀死僵尸进程,往往此种情况无法杀死僵尸进程,此时就需要杀死僵尸进程的父进程。

  kill -HUP 僵尸进程父ID

  然后使用上面第二步的语句查询该僵尸进程是否被杀死。

  4、参数解读

  ps -A -ostat,ppid,pid,cmd |grep -e ‘^[Zz]’

  -A 参数列出所有进程

  -o 自定义输出字段 stat(状态)、ppid(进程父id)、pid(进程id)、cmd(命令)

  因为状态为z或者Z的进程为僵尸进程,所以我们使用grep抓取stat状态为zZ进程

  linux僵尸进程及僵尸进程的处理

  僵尸进程

  (1)进程中的指令已经执行完成,但是进程PCB结构还没有回收。

  即子进程先于父进程退出后,子进程的PCB需要其父进程释放,但是父进程并没有释放子进程的PCB,这样的子进程就称为僵尸进程。

  (2)父进程未结束,子进程结束,但父进程没有处理子进程的退出状态(当子进程先于父进程结束,父进程没有获取子进程的退出码,子进程的PCB会保留一段时间等待父进程在PCB中获取退出码,,且该进程不可执行,此时子进程变成僵尸进程)。

  直到父进程获取到子进程的退出状态,子进程的PCB才会被移除。

  我们的程序在退出的时候:return 0,exit(0),这个0就是退出码(状态信息),它存储在当前进程的PCB中,会有一个整型值来存储退出码。

  当我们子进程结束以后,会把退出码写到PCB中,然后希望父进程可以获得到这个退出码,然后父进程就可以看到子进程是正常运行结束还是出错退出。正常的话我们return 0,失败的话我们return -1。

  僵死进程产生了,会有什么影响?

  如果只有一两个僵死进程,没有什么影响。

  如果有很多个僵死进程,持续不断的产生,就有影响了,因为子进程的PCB如果没有被释放,进程的PID就被一直占着,在内核空间中,PCB本身是结构体,会占用内存空间,对系统软硬件资源损耗,因此我们要避免僵死进程的产生,父进程有义务去处理!

  Linux环境下查看以及杀死僵尸进程

  杀死僵尸进程,方法三比较好用,推荐使用

  1、查看所有的僵尸进程

  ps -A -ostat,pid,ppid | grep -e ‘[zZ]’

  例:Z 110 101

  这列出了僵尸进程STAT列,进程ID、父进程ID

  2、杀死所有僵尸进程

  方法一:通过向父进程发送信号方式杀死,这种方法适用用父进程可以处理信号的情况

  kill -s SIGCHLD 101

  方法二:通过父进程杀死僵尸进程

  kill -HUP 僵尸进程父ID

  方法三:直接杀死所有僵尸进程

  ps -A -ostat,ppid,pid,cmd | grep -e ‘^[Zz]’ | awk -F“ ” ‘{ print $2 }’ | xargs kill -HUP

  审核编辑:黄飞

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分