wangjicheng886的个人空间 https://blog.eetop.cn/1774723 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

查看系统是否有僵尸进程

已有 607 次阅读| 2023-9-22 12:01 |个人分类:linux|系统分类:芯片设计

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


评论 (0 个评论)

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 28

    粉丝
  • 7

    好友
  • 19

    获赞
  • 8

    评论
  • 133

    访问数

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-5 10:22 , Processed in 0.011245 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部