fork(),多个孩子的问题

我编辑了一下:

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); }; } } 

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

谢谢

因此,当您fork一个进程时,新进程是父进程的相同副本,所以当您的子进程继续if ((pid = fork()) == 0) ... ,它将继续进入for – 循环和创造更多的孩子。

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

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