发布时间:2020-03-11 12:20:44编辑:admin阅读(2625)
当子进程退出时,父进程没有调用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] <defunct> 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] <defunct> 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] <defunct> 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] <defunct> 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] <defunct> 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] <defunct>
一台服务器上产生了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
下一篇: docker搭建MediaWiki
47745
46236
37110
34627
29229
25886
24745
19863
19417
17909
5716°
6315°
5835°
5888°
6985°
5829°
5846°
6361°
6316°
7673°