linux下僵尸进程的查找和处理方法

在 Linux 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他,那么他将变成一个僵尸进程。当用ps命令观察进程的执行状态时,看到这些进程的状态栏为defunct。僵尸进程是一个早已死亡的进程,但在进程表(processs table)中仍占了一个位置(slot)。

如果父进程不调用wait / waitpid的话,那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统的进程表容量是有限的,所能使用的进程号也是有限的,如果大量的产生僵尸进程,将因为没有可用的进程号而导致系统不能产生新的进程。

所以,defunct进程不仅占用系统的内存资源,影响系统的性能,而且如果其数目太多,还会导致系统瘫痪。而且,由于调度程序无法选中Defunct 进程,所以不能用kill命令删除Defunct 进程,惟一的方法只有重启系统。

查找僵尸进程的方法

可以使用top命令进行查看,右上角的zombie就是僵尸进程数,如果看到数值不为0,可以通过下面命令查看具体的僵尸进程情况

ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]'

可以通过以下方法进行僵尸进程的清除

ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]' | awk '{print $2}' | xargs kill -9

有时通过上述方法不能清除掉僵尸进程,那么我们可以尝试kill该进程的父进程(ppid)。
defunct僵尸进程可以用过下面命令进行检查

ps -A|grep defunct

处理方式和上述方法一致,可以先尝试杀掉该进程,不行的话也尝试杀父进程。
如果上述方法不行,那么只有重启操作系统解决。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/890.html

我要评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。