僵尸进程是指fork后的子进程在完成自己的工作后退出了,但是父进程却没有通过wait/waitpid获取子进程的退出码,这时子进程的资源还不能完全释放,因为需要等待父进程的回收,这时子进程就成为了僵尸进程:
#include <iostream>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
using namespace std;int main()
{pid_t pid = fork();if(pid == 0){//childexit(0);}if(pid > 0){//fathercout<<"father pid is "<<getpid()<<endl;sleep(30);cout<<"child pid:"<<pid<<" exit"<<endl;}
}
ps -aux
xxx 5537 0.0 0.0 6332 3328 pts/3 S+ 21:51 0:00 ./m
xxx 5538 0.0 0.0 0 0 pts/3 Z+ 21:51 0:00 [m] <defunct>
可以看到进程5538的状态为Z+,这就代表进程为僵尸进程
避免僵尸进程的方法:
1.通过wait/waitpid回收子进程