###僵尸进程
父进程调用fork()创建子进程,通常情况下,子进程运行时,父进程调用wait()或waitpid()函数等待子进程,子进程退出后,父进程接收到子进程的退出码,并释放子进程资源。
但如果父进程没有接收到子进程的退出码,那子进程的资源便无法回收,子进程将会以终止状态保持在进程表中,直到父进程读取它的退出码,这种子进程也就叫僵尸进程。
####僵尸进程的危害
1.僵尸进程虽然已经不再工作,但它自己那部分资源却未得到释放,会造成内存泄漏
2.计算机能够运行的进程是有限的,僵尸进程过多将导致新进程无法创建
3.僵尸进程一直保持退出状态,这是需要task_struct维护的,有一定开销。
####模拟实现僵尸进程
//模拟一个持续30s的僵尸进程
1 #include<stdio.h>
2 #include<unistd.h>
3 #include<stdlib.h>
4
5
6 int main()
7 {
8 pid_t pid = fork();//创建一个子进程
9
10 if (pid<0)//创建子进程失败
11 {
12 printf("create child process is failed!!\n");
13 }
14
15 else if (pid >0)//父进程
16 {
17 printf("parent process is sleeping:%d\n",getpid());
18 sleep(30);
19 }
20 else//子进程
21