ISOCOM(安数光)光藕和光继电器IC芯片全系列-亿配芯城-如何查看系统是否有僵尸进程
你的位置:ISOCOM(安数光)光藕和光继电器IC芯片全系列-亿配芯城 > 芯片资讯 > 如何查看系统是否有僵尸进程
如何查看系统是否有僵尸进程
发布日期:2024-01-09 11:49     点击次数:168

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

审核编辑:黄飞



相关资讯