gpt4 book ai didi

使用fork在c中创建n个子进程

转载 作者:太空宇宙 更新时间:2023-11-04 00:34:07 31 4
gpt4 key购买 nike

我在 geeks4geeks 中找到了这段代码,但我似乎无法正确理解它:

#include<stdio.h> 


int main()
{
for(int i=0;i<5;i++) // loop will run n times (n=5)
{ pid_t c=fork();
if(c == 0)
{
printf("[son] pid %d from [parent] pid %d\n",getpid(),getppid());
exit(0);
}
}
for(int i=0;i<5;i++) // loop will run n times (n=5)
wait(NULL);

}

这段代码从一个父进程创建了 5 个进程,并打印了每个子进程的消息。我的问题是:因为我们没有对 c 进行任何限制,例如父亲和第一个子进程都执行的第二个 fork进程?如果不在父亲的代码中隔离 fork,这段代码怎么会不创建 2^5 个子进程?for 循环是否以某种方式阻止了这种情况的发生?

最佳答案

子进程不会调用 fork,因为它们会在此之前退出:

for(int i=0;i<5;i++)
{
pid_t c=fork();
if(c == 0) // fork returns 0 to the child process so it enters "if" block
{
printf("[son] pid %d from [parent] pid %d\n",getpid(),getppid());
// child exits
exit(0);
}
}

如果 if block 不包含 exit 那么是的,每个 child 都会迭代回到循环的顶部并可能再次 fork 。但是由于每个子进程在打印后立即退出,只有初始父进程调用 fork,所以您只创建 5 个进程。

关于使用fork在c中创建n个子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55873277/

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