文章目录
- 1. 僵尸进程概述
- 2. ps - 系统进程操作
- 3. 僵尸进程处理方法
1. 僵尸进程概述
简述:
- 在Linux系统中若子进程退出,父进程会使用
wait
或waitpid
函数进行回收子进程的资源,并获得子进程的终止状态。
但如果父进程先于子进程结束,则子进程成为孤儿进程。孤儿进程将被init
进程(进程号为1)领养,并由init
进程对孤儿进程完成状态收集工作。而如果子进程先于父进程退出,同时父进程太忙了,无瑕回收子进程的资源,子进程残留资源(PCB)存放于内核中,变成僵尸(Zombie)进程。
解决方法:
- 僵尸进程其实已经就是退出的进程,因此无法再利用kill命令杀死僵尸进程。僵尸进程的罪魁祸首是父进程没有回收它的资源,那我们可以想办法它其它进程去回收僵尸进程的资源,这个进程就是 init 进程。因此我们可以直接杀死父进程,init 进程就会很善良地把那些僵尸进程领养过来,并合理的回收它们的资源,那些僵尸进程就得到了妥善的处理了
2. ps - 系统进程操作
ps
:(process status):显示当前进程的状态.
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
表头解释:
- USER: 行程拥有者
- PID: pid
- %CPU: 占用的 CPU 使用率
- %MEM: 占用的记忆体使用率
- VSZ: 占用的虚拟记忆体大小
- RSS: 占用的记忆体大小
- TTY: 终端的次要装置号码 (minor device number of tty)
- STAT: 该行程的状态:
- D: 无法中断的休眠状态 (通常 IO 的进程)
- R: 正在执行中
- S: 静止状态
- T: 暂停执行
- Z: 不存在但暂时无法消除 - 僵尸进程判断标准
- W: 没有足够的记忆体分页可分配
- <: 高优先序的行程
- N: 低优先序的行程
- L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
- START: 行程开始时间
- TIME: 执行的时间
- CMD:所执行的指令
3. 僵尸进程处理方法
# 寻找僵尸进程
$ ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'
# stat 显示进程状态
# ppid 显示父进程ID
# pid 显示进程ID
# cmd 显示启动进程的命令
# 寻找进程
$ ps -ef | grep $pid
# 寻找父进程
$ ps -ef | grep $ppid
# 寻找对应的cmd,找到对应的进程服务进行释放进程操作
$ kill -9 $ppid
# 或者
$ pkill $ppid