gpt4 book ai didi

c - 防止孙子在 C 中 fork

转载 作者:太空宇宙 更新时间:2023-11-04 05:41:08 25 4
gpt4 key购买 nike

我有以下代码,我在其中尝试通过 fork 创建子进程。我希望完成 3 个子流程。然而,当我运行代码时,我似乎得到了更多,可能是因为子进程派生了孙子进程。我在这里缺少什么,我该如何防止这种情况。

代码:

   for(j = 0; j < 3 ; j++){
if((pid = fork()) == 0){ // child process
dosomething();
exit(0); // terminate child process
}
else if((pid = fork()) > 0){
printf("I'm in parent of the client spawn loop\n");
// exit(0);
}
}

输出:

I'm in parent of the client spawn loop
I'm in parent of the client spawn loop
I'm in parent of the client spawn loop
I'm in parent of the client spawn loop
I'm in parent of the client spawn loop
I'm in parent of the client spawn loop
I'm in parent of the client spawn loop

最佳答案

不要执行第二个 fork 调用,因为它会创建一个新的 child 。第一个就够了:

for (j = 0; j < 3; ++j)
{
pid_t pid = fork();
if (pid == 0)
{
printf("In child (j = %d)\n", j);
exit(0);
}
else if (pid > 0)
{
printf("In parent (j = %d)\n", j);
}
}

将打印 "In child" 三次,其中 j 等于 012。父打印也是如此。

不过,在您的实际代码中,您应该检查错误。

关于c - 防止孙子在 C 中 fork ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18965918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com