我编辑了一点:
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);
};
}
}
我的问题:我遇到了很多孩子,就像炸弹一样产卵。我怎样才能阻止那些孩子?休息应该停止吧?
Thanks
所以,当你fork
一个进程,新进程是父进程的相同副本,因此当您的孩子从if ((pid = fork()) == 0) ...
,它将继续进入 for 循环并创建更多子项。
孩子应该使用exit(0)
当它完成时(或者至少不继续fork
-loop - 你可以使用break;
例如退出循环。最终,子进程应该exit
然而。
在另一侧,如果您想在创建下一个孩子之前确保该孩子已完成fork
,你应该使用waitpid()
或其他一些变体wait
。当然,这些将等待分叉进程退出,因此如果分叉进程不退出,则不会起作用。但您需要制定处理每个流程的策略。如果你想同时运行 20 个分叉进程,那么你可能需要存储你的pid
在一个数组中,以便您稍后可以跟踪进程。无论如何,您的主流程应该跟踪并确保流程在其自行完成之前完成。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)