linux中的孤儿进程

介绍

父子进程之间的关系会出现孤儿进程与僵死进程;

  • 僵死进程为父进程还没有结束,子进程结束了自己行程,可能是正常结束也可能是因为某些意外而结束,其中可以通过wait或者waitpid查看其原因,在前面几篇文章中有所介绍;
  • 孤儿进程则与之相反,即为父进程结束了自己的行程——正常结束或者异常退出,但子进程还依旧存在,此时子进程的父进程的pid则为1。内核会将孤儿进程的父进程设置为1;

孤儿进程

因为进程之间的内容是相互独立的,因此对于程序来说孤儿进程的伤害并不大;只不过是占用相关的内存和CPU利用而已;
在前文中,主要展示的都为僵尸进程,本文主要代码展示的为孤儿进程的内容。

  • 创建进程
  • 父进程用一段时间休眠,用于子进程显示其父进程的pid
  • 子进程用一段时间休眠,用于父进程正常结束,并显示其僵尸进程的父进程
#include <iostream>
#include <unistd.h>
using namespace std;

int main()
{
    pid_t p = fork();
    if(p < 0)
    {
        cout<<"error"<<endl;
        exit(1);
    }
    else if(p == 0)
    {
        // 子进程
        cout<<"I am son process mypid = "<<getpid()<<" my father pid="<<getppid()<<endl;
        sleep(5); // 用于父进程结束之后显示
        cout<<"I am son process mypid = "<<getpid()<<" my father pid="<<getppid()<<endl;
    }
    else
    {
        cout<<"I AM FATHER PROCESS MYpid = "<<getpid()<<" MYSONPID = "<<p<<endl;
        sleep(1); // 用于子进程可以显示父进程
        cout<<"FATHER DESTROY"<<endl;
    }
    return 0;
}

具体展示,可以看到子进程显示的父进程为其pid = 1;

➜  aloneFork ./a.out
I AM FATHER PROCESS MYpid = 23907 MYSONPID = 23908
I am son process mypid = 23908 my father pid=23907
FATHER DESTROY
➜  aloneFork I am son process mypid = 23908 my father pid=1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值