父进程创建多个子进程的问题

本文详细探讨了在编程中如何正确地创建和管理子进程,避免常见错误,并提供了解决方案来确保进程数量的准确性。通过实例分析,读者可以掌握在不同场景下使用fork函数时的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        父进程创建子进程,看起来容易,返回值等于零在子中,大于零0在父进程中。可是当遇到一个父进程需要创建多个子进程的时候,问题就变得复杂了,稍不留神你将创建出比你多好多的子进程,因为当在子进程中调用fork(),那么自己进程也会创建子进程,结果因此和在父进程中创建子进程有很大的不同。

       所以在fork时,一定要判定此时是不是在父进程中。

   

int main()
{
    pid_t pid[2];
    int i;
    printf("This is %d\n",getpid());
    for(i = 0;i < 3;i++ ){
        if((pid[0] = fork()) < 0){
            printf("Fork() Error!");
            exit(-1);
        }
        if(pid[0] == 0)
            printf("This is parent %d,child is %d\n",getppid(),getpid());
        
           
    }
    return 0;
}

此时创建了几个进程类?如果你的答案是3,那你就错了。答案是7个进程。
解决方法
void createsubprocess(int num)  
{  
    pid_t pid;  
    int i;  
    for(i=0;i<num;i++)  
    {  
        pid=fork();  
        if(pid==0||pid==-1)  //子进程或创建进程失败均退出,这里是关键所在
        {  
            break;  
        }  
    }  
    if(pid==-1)  
    {  
        perror("fail to fork!\n");  
        exit(1);  
    }  
    else if(pid==0)  
    {  
        printf("子进程id=%d,其对应的父进程id=%d\n",getpid(),getppid());  
        exit(0);  
    }  
    else 
    {  
        printf("父进程id=%d\n",getpid());  
        exit(0);  
    }  
}


具体参考:http://www.360doc.com/content/12/0409/17/532901_202238408.shtml

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值