我们在日常开发过程中经常使用kill -9 来杀死一些进程,但在某些情况下我们用这个命令无法将进程杀死,这个时候怎么办呢,我来教大家一招:
通常出现这种情况的原因有两种,第一种是是当一个进程已经完成了它的运行,但是其父进程还没有读取到它的结束状态,那么这个进程就会成为僵尸进程。僵尸进程实际上已经结束了,所以你无法使用kill命令来杀掉它;第二种是如果一个进程正在执行某些内核级别的操作(即进程处在内核态),那么这个进程可能无法接收到kill命令发送的信号。
如果你怀疑有僵尸进程存在,你可以使用以下命令来查找所有的僵尸进程:
ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'
你可以使用以下命令来杀掉父进程:
kill -HUP [父进程的PID]
如果一个进程处在内核态,那么这个进程可能无法接收到kill命令发送的信号。在这种情况下,你需要首先找到这个进程的父进程,然后试图杀掉父进程。你可以使用以下命令来查找进程的父进程:
cat /proc/[PID]/status | grep PPid
然后,你可以使用以下命令来杀掉父进程:
kill -9 [父进程的PID]
你需要注意的是在杀掉父进程之前确定这样做不会影响到系统的其他部分。另外,这个方法并不保证能够杀掉所有的内核态进程。