孤儿进程

孤儿进程

什么是孤儿进程

孤儿意味着什么?提到孤儿,首先想到的肯定是父母双亡。现实情况是,一般孤儿(未成年)都要被福利院或者领养人收养。计算机一般都是现实世界的抽象,同样,linux中的孤儿进程和被收养的孤儿有着异曲同工之意。

linux中,父进程通过fork()函数生成子进程,如果在子进程还没结束之前,父进程由于各种原因终止了,这时候,子进程父母双亡,被1号进程(init进程)领养人收养,子进程就成为了孤儿进程。此时查看子进程的父进程,就变成了init进程(1号进程)。

实例讲解

下面用一个例子来说明孤儿进程。

#include <stdio.h>
#include <unistd.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
    pid_t pid;

    pid = fork();
    if (pid < 0)
    {
        perror("fork error");
        exit(1);
    }
    else if (pid == 0) // child process
    {
        printf("child process %d, parent process %d\n", getpid(), getppid());
        sleep(5);
        printf("parent process died now\n");
        printf("child process %d, parent process %d\n", getpid(), getppid());
        exit(0);
    }
    else // parent process
    {
        printf("parent process %d\n", getpid());
        sleep(1);
        printf("parent process closed now.\n");
        exit(0);
    }
    return 0;
}

编译和运行程序,如下:

/source/orphan# gcc orphan.c -o orphan
/source/orphan# ./orphan
parent process 10272
child process 10273, parent process 10272
parent process closed now.
/source/orphan# parent process died now
child process 10273, parent process 1
^C

简要说明下程序。

先fork生成一个子进程。

如果fork调用失败,直接返回错误码和错误信息。

从运行例子可以看出,fork成功后,子进程10273,父进程10272。

然后我们让父进程先于子进程终止。由于fork后父子进程的运行顺序是不确定的,此时我们让父进程sleep1秒,子进程sleep5秒,确保父进程先执行exit从而终止运行。

此时,子进程10273的父进程已经变为1号进程了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值