僵尸进程查杀

2019-02-14  本文已影响1人  genglintong

僵尸进程,是指在Linux/Unix系统中,一个进程结束了,但是他的父进程没有等待(调用wait/waitpid)他,那么他将变成一个僵尸进程。

缘起

在学习top命令时,发现服务器系统有几个僵尸进程。 屏幕快照 2019-02-14 下午4.43.03.png

top命令参数解析

查看僵尸进程并寻找原因

ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]'查看僵尸进程,发现三个僵尸进程

屏幕快照 2019-02-14 下午5.08.11.png
查看僵尸进程的父进程id,发现父进程为sendmail 产生的进程。再溯源找到sendmail的父进程为CROND,该进程为croud守护进程的子进程。
屏幕快照 2019-02-14 下午5.10.24.png 屏幕快照 2019-02-14 下午5.12.57.png 屏幕快照 2019-02-14 下午5.13.19.png
查找资料和服务器配置,发现服务器配置了很多的crontab 定时任务,有一些任务定义不规范,没有重定向到空设备上,导致大量的执行输出信息输出到标准输出上,写入/var/mail。触发了sendmail,把信息通过邮件发送,产生僵尸进程。修改为****** shell > /dev/null 2>&1即可。

杀掉僵尸进程

杀掉僵尸进程方法很简单,找到僵尸进程的父进程,将父进程kill掉即可。

kill -9 24637
kill -9 24641
kill -9 29055
# 批量杀掉僵尸进程
kill -HUP `ps -A -ostat,ppid | grep -e '^[Zz]' | awk '{print $2}'`
僵尸进程数 为0

由上图可知,僵尸进程已被杀死,系统僵尸进程数为0.

上一篇下一篇

猜你喜欢

热点阅读