僵尸进程
使用命令ps -A -ostat,ppid,pid,cmd |grep -e '^[Zz]'定位僵尸进程以及该僵尸进程的父进程
僵尸进程ID:3457,父进程ID:3425
僵尸进程ID:3533,父进程ID:3511
使用Kill -HUP 僵尸进程ID来杀死僵尸进程,往往此种情况无法杀死僵尸进程,此时就需要杀死僵尸进程的父进程
kill -HUP 僵尸进程父ID
ps -A -ostat,ppid,pid,cmd |grep -e '^[Zz]'
-A 参数列出所有进程
-o 自定义输出字段 stat(状态)、ppid(进程父id)、pid(进程id)、cmd(命令)
因为状态为z或者Z的进程为僵尸进程,所以我们使用grep抓取stat状态为zZ进程
ps -A -ostat,ppid,pid,user,cmd |grep -e '^[Zz]'|awk '/defunct/ {print $2}'|xargs kill -9
新版:
YDXP-APP3:~ # ps -A -ostat,ppid,pid,user,cmd |grep -e '^[Zz]'
Zs 908 914 piccmon [sh] <defunct>
Zs 2314 2320 piccmon [sh] <defunct>
Zs 3577 3583 piccmon [sh] <defunct>
Zs 4621 4627 piccmon [sh] <defunct>
Zs 5932 5933 piccmon [sh] <defunct>
Zs 7054 7061 piccmon [sh] <defunct>
Zs 8055 8056 piccmon [sh] <defunct>
Zs 9365 9369 piccmon [sh] <defunct>
Zs 10421 10428 piccmon [sh] <defunct>
Zs 11453 11461 piccmon [sh] <defunct>
Zs 13781 13788 piccmon [sh] <defunct>
僵尸进程就是进程已经死亡,但没有释放系统资源,包括内存和一些系统表等,如果这样的进程存在,会引发系统问题。用ps -el看出的进程状态如果是Z,就是僵尸进程。
ps -el|awk '$2~/Z/{print}' 进行输出:
-------------------------------------------------------------------------------------
1 Z 0 10867 3043 2 178 20 137ce6340 0 -? 0:00
-------------------------------------------------------------------------------------
简单介绍一下这个命令以及输出的结果:
-e 列出所有进程
-l 显示列flags,state,uid,pid,ppid,cpu,intpri,nice,addr,sz,wchan,tty,time和comm(按照该顺序输出)
flags 与进程相关联的标志:0 已交换;1 在核心中;2 系统进程
state 进程的状态。0 不存在;S 休眠;W 等待;R 运行;Z 已终止(S为缺省状态)
cpu 用于调度的CPU利用率
nice Nice值,在优先级计算中使用
addr 如果驻留则为进程的内存地址;否则为硬盘地址
time 进程累积执行时间
清除ZOMBIE(僵尸)进程可以使用如下方法:
1> kill –15 PID
2>如果不行则看能否终止其父进程(如果其父进程不需要的话)。先看其父进程又无其他子进程,如果有,可能需要先kill其他子进程,也就是兄弟进程。方法是:
kill –15 PID1 PID2(PID1,PID2是僵尸进程的父进程的其它子进程)。
然后再kill父进程:kill –15 PPID
这样僵尸进程就可能被完全杀掉了。