孤儿进程以及孤儿进程组

孤儿进程

正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。 当一个 进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态。

解释:

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

孤儿进程是没有父进程的进程,孤儿进程这个重任就落到了init进程身上,init进程就好像是一个民政局,专门负责处理孤儿进程的善后工作。每当出现一个孤儿进程的时候,内核就把孤 儿进程的父进程设置为init,而init进程会循环地wait()它的已经退出的子进程。这样,当一个孤儿进程凄凉地结束了其生命周期的时候,init进程就会代表党和政府出面处理它的一切善后工作。因此孤儿进程并不会有什么危害。

孤儿进程测试如下:

  1 #include<stdio.h>                                                           
  2 #include<stdlib.h>
  3 #include<errno.h>
  4 #include<unistd.h>
  5 
  6 int main()
  7 {
  8         pid_t pid;
  9 
 10         pid=fork();
 11 
 12         if(pid<0)
 13         {
 14                 perror("fork error");
 15                 exit(1);        
 16         }
 17         else if(pid==0)
 18         {
 19                 printf("I am the child process.\n");
 20 
 21                 printf("pid:%d\tppid:%d\n",getpid(),getppid());
 22                 printf("I will sleep five seconds.\n");
 23 
 24                 sleep(5);//让父进程先结束,使得子进程成为孤儿进程
 25                 printf("pid%d\tppid:%d\n",getpid(),getppid());
 26                 printf("child process is exited\n");
 27         
 28         
 29         }
 30         else
 31         {
 32                 printf("I am father process.\n");
 33                 sleep(1);
 34                 printf("father process is exiting\n");
 35         }
 36 return 0;
 37 }                                                                     

这里写图片描述

孤儿进程组

定义1
该组中的每个成员的父进程要么是该组的一个成员,要么不是该组所属会话的成员
定义2
不是孤儿进程组的条件是,该组中有一个进程,其父进程属于同一会话的另一个组中。
也就是说,将该父进程终止就能使该进程组成为僵尸进程孤儿进程(感谢网友”hello”的指正)。这个父进程通常是这个进程组的组长进程,因为只有它的父进程在这个进程组外,而其他进程(组长的子进程)的父进程都是组长进程的ID。

会在后面的学习中补充说明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值