僵尸进程问题解决

发布时间 2023-05-20 09:09:34作者: doufei

1 何为僵尸进程

僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。如果父进程先退出 ,子进程被init接管,子进程退出后init会回收其占用的相关资源。

在UNIX系统中,一个进程结束了,但是它的父进程没有等待(调用wait / waitpid)它, 那么它将变成一个僵尸进程。 但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程, 因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程, 看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init来接管他,成为他的父进程。

使用top命令查看,zombie代表僵尸进程的数量

imgs/2023-01-13/G8ZJGTYkjHVhJWrg.png


2 查看具体的僵尸进程都有哪些,列出状态、父进程id,子进程id 执行命令(cmd)

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

imgs/2023-01-13/5npNb1ZuLssskpnj.png


3 根据进程id查看具体的启动信息

ps -aux | grep 6120

imgs/2023-01-13/FuVAfaYbhHElwTcJ.png


4 杀掉僵尸进程

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