linux:模拟僵尸进程和孤儿进程

linux:模拟僵尸进程和孤儿进程

1.僵尸进程

  • 僵死状态(Zombies)是一个比较特殊的状态。当进程退出并且父进程没有读取到子进程退出的返回代码时就会产生僵死(尸)进程
  • 僵死进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态
#include <stdio.h>
#include <unistd.h>
#include<stdlib.h>
int main()
{
  pid_t id = fork();
  if(id<0){
  perror("fork");
  return 1;
  }
  else if(id>0){
  printf("father[%d] is sleeping...\n",getpid());
  sleep(30);
  }else{
    printf("child[%d] is begin Z...\n",getpid());
    sleep(5);
    exit(EXIT_SUCCESS);
  }
return 0;
}

让父进程休眠30秒,子进程休眠5秒后退出,在此状态下的子进程就成了僵尸进程
在这里插入图片描述
2.孤儿进程

  • 父进程如果提前退出,那么子进程后退出,进入Z状态之后,被称为孤儿进程,孤儿进程会被1号init进程领养,要由init进程回收
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
pid_t id = fork();
if(id < 0){
perror("fork");
return 1;
}
else if(id == 0){//child
printf("I am child, pid : %d\n", getpid());
sleep(10);
}else{//parent
printf("I am parent, pid: %d\n", getpid());
sleep(3);
exit(0);
}
return 0;
}

父进程睡眠3秒后被终止,此时的子进程还未退出,就变成了孤儿进程。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值