全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

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

时间:2023-11-29 15:52

人气:

作者:admin

标签: Linux  进程  PCB 

导读:进程中的指令已经执行完成,但是进程PCB结构还没有回收。 即子进程先于父进程退出后,子进程的PCB需要其父进程释放,但是父进程并没有释放子进程的PCB,这样的子进程就称为僵尸进...

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

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

wKgaomVm7UeAWCgqAASy3vXx9DY652.png

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

审核编辑:黄飞

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信