一、概述

 

僵尸进程是怎么产生的

当子进程退出时,父进程没有调用wait函数或者waitpid()函数等待子进程结束,又没有显式忽略SIGCHLD信号,那么它将一直保持在僵尸状态,如果这时父进程结束了,init进程会自动接收这个子进程,为它收尸,但如果父进程是一个循环,不会结束,那么子进程就会一直保持僵死状态。

进程状态:

Z 僵尸

S 休眠

D 不可中断的休眠

R 运行

T 停止时跟踪

 

二、查看僵尸进程

ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]'

 

命令注解:

-A 参数列出所有进程

-o 自定义输出字段 我们设定显示字段为 stat(状态), ppid(进程父id), pid(进程id),cmd(命令)这四个参数

 

因为状态为 z或者Z 的进程为僵尸进程,所以我们使用grep抓取stat状态为zZ进程运行结果参考如下:

root 426489 0.0 0.0 0 0 ? Z 13:58 0:00 [check_haproxy.s]

root 427159 0.0 0.0 3920 380 ? T 13:59 0:00 /opt/script/check_haproxy.sh

root 427161 0.0 0.0 0 0 ? Z 13:59 0:00 [check_haproxy.s]

root 428023 0.0 0.0 3920 384 ? T 14:00 0:00 /opt/script/check_haproxy.sh

root 428025 0.0 0.0 0 0 ? Z 14:00 0:00 [check_haproxy.s]

root 429389 0.0 0.0 3920 384 ? T 14:02 0:00 /opt/script/check_haproxy.sh

root 429390 0.0 0.0 0 0 ? Z 14:02 0:00 [check_haproxy.s]

root 430245 0.0 0.0 3920 380 ? T 14:04 0:00 /opt/script/check_haproxy.sh

root 430247 0.0 0.0 0 0 ? Z 14:04 0:00 [check_haproxy.s]

root 431136 0.0 0.0 3920 384 ? T 14:06 0:00 /opt/script/check_haproxy.sh

root 431137 0.0 0.0 0 0 ? Z 14:06 0:00 [check_haproxy.s]

 

三、杀死僵尸进程

一台服务器上产生了100多少僵死进程,而且每一僵死进程的父进程都不一样,如果用 

kill -9 进程id

 

一条一条的杀,那还不得累死我啊。

那么就应该想一条简单的命令,直接查找僵死进程,然后将父进程杀死~

ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]' | awk '{print $2}' | xargs kill -9

 

 

本文参考链接:

https://www.jianshu.com/p/2fa847da27cb

https://www.cnblogs.com/reality-soul/p/6343339.html

 

推荐阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。