fork(),多个孩子的问题

时间:2013-08-31 10:32:05

标签: c fork parent semaphore

我编辑了一下:

for ( ii = 0; ii < nbEnfants; ++ii) {
    switch (fork()){
        case -1 : {
                    printf("\n\nSoucis avec fork() !!! \n\n");
                    exit(0);
                    };

        case 0 : {
                    EEcrireMp(ii);
                    }break;
        default : {
                    tabPidEnfants[ii] = p;
                    usleep(50000);
                    ELireMp(nbSect, nbEnfants,tabPidEnfants);
                    };
    }
}

我的问题:我遇到了很多孩子,就像孩子产卵的炸弹一样。我怎么能阻止那些孩子?休息应该阻止它吗?

由于

1 个答案:

答案 0 :(得分:2)

因此,当您fork进程时,新进程是父进程的相同副本,因此当您的子进程从if ((pid = fork()) == 0) ...继续时,它将继续进入for循环并创建更多的孩子。

孩子在完成时应该使用exit(0)(或者至少不要继续fork - 循环 - 例如,你可以使用break;退出循环。最后,子进程但应该exit

在OTHER方面,如果您想在创建下一个fork之前确保此子项已完成,则应使用waitpid()wait的其他变体。当然,这些会等待分叉进程退出,所以如果分叉进程没有退出,那就不行了。但是,您需要制定一个策略来处理每个流程。如果您希望同时运行20个分叉进程,那么您可能需要将pid存储在一个数组中,以便稍后跟踪这些进程。无论如何,您的主要流程应该跟踪并确保流程在完成之前完成。