Linux处理僵尸进程

僵尸进程产生的原因

当一个进程被终止,其父进程和内核还是需要知道进程的有些信息,如进程的ID号、进程的退出状态、进程运行的CPU时间等。进程在终止时回收内核分配给它的内存、关闭它打开的所有文件等,但还是会保留极少信息,以供父进程使用。父进程调用 wait / waitid 获取子进程信息以释放保留的那段信息。

原因

  1. 子进程终止后向父进程发出SIGCHLD信号,父进程默认忽略了它。
  2. 父进程没有调用wait()或waitid()函数来等待子进程结束。

僵尸进程的危害

僵尸进程虽然占用系统资源少,但是如果数量多的话,一样会严重影响到服务器性能。

僵尸进程如何kill

查看僵尸进程

ps -aux |grep Z
# STAT为Z说明是僵尸进程

查看僵尸进程的数量

top|head -n 2
# zombie的数量就是僵尸进程的数量

普通僵尸进程

手动杀死父进程后,由系统init进程回收。

ps -ef|grep PID
kill -9 PPID
# 此处PID为僵尸进程的,通过ps命令查询可得到PPID。
# 杀死父进程的PPID

PPID为1的僵尸进程

暂时没有好的解决方式,需要重启主机。