关于进程问题的一些思考

进程fork()函数可能返回三个值:
0: 该进程为子进程(因为它没有子进程,故为0)
进程标识: 该进程为父进程
负数: 创建进程失败

在做上机作业的时候,没有思考到位,导致出现了逻辑错误:
这里写图片描述

最终输出两组sub_1 一组sub_2 一组parent
期望输出为两组sub_2 一组sub_1 一组parent

后来经过实验,打印出pid1和pid2的值,发现了如下特点:
这里写图片描述

pid2是在第一个fork后定义的,所以在此产生的进程与父进程共享一个pid1的值。
图中pid为4160的进程虽然没有参与第一次进程的创建,但它从父进程中得到了这一值。

正确的逻辑:

int pid1=fork();
    int pid2=fork();
    int i=0;
    while(i++<1)
    {
        if(pid2==0){
        printf("this is from sub_2!pid=%d pid1=%d pid2=0\n",getpid(),pid1);
        }else if(pid1==0){
        printf("this is from sub_1!pid=%d pid1=0 pid2=%d\n",getpid(),pid2);
        }else{
        printf("this is from parent!pid=%d\n pid1=%d pid2=%d\n",getpid(),pid1,pid2);}
    }

以最后创建的进程为先决条件判断。

结果

运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值