我创建了一个包含3个孩子的流程。问题是我无法在fork()==0
结束时创建任何这些孩子而不会杀死它们。
我的代码就像:
for(i=0 ; i<3 ; i++){
if(fork()==0){
//do child things
exit(0);
}
else{
//do parent things
}
}
我想在不杀死他们的情况下创建这3个孩子,并且在创建它们时将其全部杀死。
PS:对不起我的英语:)
答案 0 :(得分:0)
您需要跟踪每个孩子的pid。然后在循环结束时,你kill
。
pid_t child_pid[3];
for(i=0 ; i<3 ; i++){
child_pid[i] == fork();
if (child_pid[i]==-1){
perror("fork failed");
exit(0);
} else if (child_pid[i]==0){
//do child things
exit(0);
}
else{
//do parent things
}
}
for(i=0 ; i<3 ; i++){
kill(child_pid[i], SIGKILL);
}
答案 1 :(得分:0)
问题在于我无法在不杀死它们的情况下创建任何这些孩子
我在你的示例代码中看到的唯一可以与之关联的内容是&#34; kill&#34;孩子们打电话给exit()
。我根本不会称之为&#34;杀死&#34;然而,他们;每个孩子在工作结束时执行exit()
时都会正常终止。
此外,在这一点上,没有任何东西强迫你让孩子exit()
。如果他们不退出,他们只是继续if
块。如果你不希望他们分叉自己的孩子,那么你可以用break
代替exit()
,以便他们突破周围的循环。
这确实提出了这样做是否有意义的问题。除非实际上有一些适合孩子们在离开循环后执行的工作,否则让他们像现在一样打电话给exit()
是正确的。
无论如何,如果你真的想要强行杀死子进程而不是让它们正常终止,那么@ dbush演示了如何做到这一点。但是,也许你希望父母在循环之后等待直到孩子们都自己终止。在这种情况下,您可以拨打kill()
,而不是在@dbush演示时调用waitpid()
。另请注意,如果你手动杀死孩子,那么你应该也等待他们。只有当您希望孩子们能够独立继续跑步时才能等到他们。