僵尸进程
- 概念:僵尸进程是子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程
- 僵尸进程:由于各种原因导致某个进程挂掉了,但是进程本身仍然存在,还占用系统资源,这种异常进程就是僵尸进程
- 查找:ps aux 过滤,Z状态即可找出僵尸进程,或者 top 命令查看
- 解决:
- 找出僵尸进程的上级进程,结束进程即可
- 如果上级进程是主进程(pid 为 1 的进程),则需要重启 Linux 系统

模拟僵尸进程
yum install -y gcc
# zombie.c 代码
#include <sys/types.h>
#include <sys/wait.h>
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{pid_t pid;pid = fork();if(pid == 0) {int iPid = (int)getpid();fprintf(stderr,"I am child,%d\n",iPid);sleep(1);fprintf(stderr,"child exits\n");return EXIT_SUCCESS;}int iPid = (int)getpid();fprintf(stderr,"I am parent,%d\n",iPid);fprintf(stderr,"sleep....\n");sleep(600);fprintf(stderr,"parent exits\n");return EXIT_SUCCESS;`在这里插入代码片`
}
gcc zombie.c -o zombie.bin

./zombie.bin

查询
top

ps aux | grep Z

pstree -p | grep 2129

kill 2129
kill -9 2129

kill 2128ps aux | grep Z