模拟实现僵尸进程&孤儿进程

本文介绍了僵尸进程和孤儿进程的概念:僵尸进程是进程退出但其父进程未读取其退出状态,孤儿进程则是父进程退出后子进程由init接管。接着通过代码模拟实现了20秒的僵尸进程和孤儿进程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、僵尸进程&孤儿进程

1、僵尸进程

当进程退出并且⽗父进程(使⽤用wait()系统调⽤用)没有读取到⼦子进程退出的返回代码时就会产⽣生僵尸进程;僵尸进程会在以终止状态保持在进程表中,并且会一直等待父进程读取退出状态代码。

2、孤儿进程

一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。

二、模拟实现僵尸进程和孤儿进程

(1)实现一个子进程维持20秒僵尸进程的代码:

      1 #include<stdio.h>
      2 #include<stdlib.h>
      3 #include<unistd.h>
      4 #include<sys/types.h>
      5 
      6 int main(void)
      7 {
      8     pid_t id=fork();
      9     if(id<0)
     10     {
     11         perror("fork");
     12     }
     13     else if(id==0)
     14     {
     15         //parent
     16         printf("Hi!I'm father!\n");
     17         exit(0);
     18     }
     19     else
     20     {
     21        //   printf("child[%d] is begin ...\n",getpid());
     22         sleep(20);
     23         wait(NULL);
     24     }
     25  }

编译结束出现的结果如下:
这里写图片描述
2、孤儿进程

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

编译运行结果:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值