在Linux中终止进程是很容易的通过kill命令即可终止进程,但有些进程会一直kill不掉。
kill -9 PID
命令是发送SIGKILL信号给进程将其终止。
但对于以下两种情况不适用:
1.该进程是僵尸进程(STAT z),此时进程已经释放所有的资源,但是没有被父进程释放。
僵尸进程要等到父进程结束,或者重启系统才可以被释放。
2.进程处于内核态[^2],并且在等待不可获得的资源,处于内核态的资源默认忽略所有信号,只能重启系统解决。
进程在Linux 中会处于两种状态,即用户态和内核态。只有处于用户态的进程才可以用'kill'命令将其终止
第一步:利用命令查找僵尸进程
ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'
命令注解:
-A 参数列出所有进程
-o 自定义输出字段 我们设定显示字段为 stat(状态), ppid(进程父id), pid(进程id),cmd(命令)这四个参数 因为状态为 z或者Z的进程为僵尸进程,所以我们使用grep抓取stat状态为zZ进程
第二步:杀死进程
kill -9 PID
或者
kill -HUP 父进程PID
[^2]:内核态指进程名字上带英文中括号(例:[qb])