linux 杀掉僵尸进程 (zombie process, defunct)

本文说明为什么会出现僵尸进程 (zombie process, defunct),以及如何杀掉僵尸进程

1. 为什么有僵尸进程

僵尸进程出现在父进程没有回收子进程的 PCB 的时候,这个时候子进程已经结束,但是父进程没有回收它,所以保存了一份子进程的 PCB 在父进程的内核空间中。

僵尸进程占用的是一个 PCB 结构体的内存空间,所以占用量不会太大,但是过多的僵尸进程就会出现内存泄露。

2. 如何杀掉僵尸进程

解决的办法就是给父进程发送一个终止的信号。例如 SIGKILL / SIGINT / SIGTERM 信号。

只要父进程终止了,那么僵尸进程的 PPID 就变成了 init 进程。那么自然 init 进程就会回收子进程的 PCB。

这样僵尸进程就被杀掉了。

知道了原理和解决方法就好办了,下面的命令会自动 kill 所有的僵尸进程:

ps -e -o ppid,stat | grep Z | cut -d" " -f2 | xargs kill -9

命令说明: 

ps -e -o ppid,stat

    打印所有的进程的 ppid (父进程号) 和 stat (进程状态)

grep Z

    找出僵尸进程

cut -d" " -f2

    取 ppid 字段

xargs kill -9

    强制 kill 这些父进程

原文地址:https://www.cnblogs.com/weiweifeng/p/7464426.html