Ubuntu查找以及结束僵死进程

1 前言

Zombie : 僵死进程

1.1 什么是僵尸进程?

我们都知道进程的工作原理。

我们启动一个程序,开始我们的任务,然后等任务结束了,我们就停止这个进程。 进程停止后, 该进程就会从进程表中移除。

但是,有时候有些程序即使执行完了也依然留在进程表中。
那么,这些完成了生命周期但却依然留在进程表中的进程,我们称之为 僵尸进程

1.2 僵尸进程如何产生的?

当你运行一个程序时,它会产生一个父进程以及很多子进程。 所有这些子进程都会消耗内核分配给它们的内存和 CPU 资源。

这些子进程完成执行后会发送一个 Exit 信号然后死掉。这个 Exit 信号需要被父进程所读取。父进程需要随后调用 wait 命令来读取子进程的退出状态,并将子进程从进程表中移除。

若父进程正确第读取了子进程的 Exit 信号,则子进程会从进程表中删掉。

但若父进程未能读取到子进程的 Exit 信号,则这个子进程虽然完成执行处于死亡的状态,但也不会从进程表中删掉。

1.3 僵尸进程对系统有害吗?

由于僵尸进程并不做任何事情, 不会使用任何资源也不会影响其它进程, 因此存在僵尸进程也没什么坏处。

但是,由于进程表中的退出状态以及其它一些进程信息也是存储在内存中的,因此存在太多僵尸进程有时也会是一些问题。


2 查找以及结束僵死进程

2.1 查找僵死进程

首先,可以使用top命令查看当前是否有Zombie(僵死)进程:
wVoPFU.png
也可以用 ps -aux |grep Z命令 来查看僵尸进程,

可以看到僵尸进程数,1 zombie,1 代表系统存在一个僵尸进程,

最后,利用ps命令查找Zombie进程(僵尸进程的状态显示的是Z),

ps -A -ostat,ppid,pid,cmd | grep -e '^[zZ]'

如下结果:

xxx@xxx-NB50TJ1-TK1:~$ ps -A -ostat,ppid,pid,cmd | grep -e '^[zZ]'
Z+     70837   70912 [fcitx] <defunct>
xxx@xxx-NB50TJ1-TK1:~$ ^C

70912 是僵死进程ID,70837 就是 它的父进程ID,只要杀死它的父亲进程就可以结束僵死进程了

2.2 结束Zombie进程

直接kill -9 Zombiepid是没有作用的;

原因:Zombie表示进程已经退出,想要清理这样的进程,需要清除其父进程或者等很长时间后内核将其清除

kill -HUP ppid(父进程ID)

这样父进程就会删除所有完成并死掉的子进程了

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值