模拟实现僵尸进程、孤儿进程的场景

首先了解一下什么是僵尸进程、什么是孤儿进程。

(1)Z(zombie)僵尸进程

  • 僵尸状态(zombie)是一个比较特殊的状态。当进程退出并且父进程(使用wait()系统调用)没有读取到子进程退出的返回代码时就会产生僵尸进程。
  • 僵尸进程会以终止状态保持在进程表中,并且会一直等待父进程读取退出状态代码。
  • 所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态。

(2)孤儿进程

  • 父进程如果提前退出,那么子进程后退出,进入Z之后,那该如何处理呢?
  • 父进程先退出,子进程就称之为“孤儿进程”。
  • 孤儿进程被1号init进程领养,当然要有init进程回收喽。
  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 
  4 int main(  )
  5 {
  6     pid_t id = fork();
  7     if(id < 0){
  8     perror("fork");
  9     return 1;
 10     }
 11     else if(id > 0){
 12     printf("parent[%d] is sleeping...\n",getpid());
 13     sleep(30);
 14     }
 15     else{
 16     printf("child[%d] is begin z...\n"  ,getpid());
 17     sleep(5);
 18     exit(EXIT_SUCCESS);
 19     }
 20     return 0;

这里写图片描述

这里写图片描述


  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <unistd.h>
  4 
  5 int main(  )
  6 {
  7     pid_t id = fork();
  8     if(id < 0){ 
  9     perror("fork");
 10     return 1;
 11     }
 12     else if(id == 0){
 13     printf("I am child,pid : %d\n",getpid());
 14     sleep(10);
 15     }
 16     else{ 
 17     printf("I am parent, pid : %d\n" ,getpid());
 18     sleep(3);
 19     exit(0);
 20     }
 21     return 0;
 22 }      

这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/t595180928/article/details/80425250