理解linux fork()执行多次

20 篇文章 0 订阅
5 篇文章 0 订阅

上代码:

#include<stdio.h>
#include<stdlib.h>

int main()
{
    pid_t p1 = fork();
    pid_t p2 = fork();
    if ( p2 == 0 )
        printf("p1 = %d, p2 = %d\n", p1, p2);
    else
        printf("p1 = %d, p2 = %d\n", p1, p2);

    //printf("p1 = %d, p2 = %d\n", p1, p2);
    return 0;
}

分析:

fork()的返回值包含两种结果:1、> 0,表示在父进程空间;2、== 0,表示在fork成功之后的子进程空间;

那么上述代码存在4种结果:

假设:p1 == 1001,p2 == 1002

1、p1 = 1001, p2 = 1002

2、p1 = 1001, p2 = 0

3、p1 = 0, p2 = xxx(该进程号未知)

4、p1 = 0, p2 = 0

其中,

p1 = 1001,p2 = 1002,表示在main进程中看到的p1进程号和p2进程号;

p1 = 1001,p2 = 0,表示在main进程空间fork除了p1之后继续留在main进程空间,然后fork出p2之后进入了p2的进程空间中;

p1 = 0, p2 = xxx(该进程号未知)表示在p1进程的进程空间,并fork了p2进程并继续留在p1的进程空间中;

p1 = 0, p2 = 0表示在p1进程空间fork出来了p2进程,并进入了p2进程空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值