C 循环中的Linux Fork功能
有人能解释一下这个C代码是如何工作的吗?完成后将生成多少个进程C 循环中的Linux Fork功能,c,linux,unix,C,Linux,Unix,有人能解释一下这个C代码是如何工作的吗?完成后将生成多少个进程 int main(void) { int i; for(i=1; i<=42; i++) { fork(); } return 0; } int main(无效) { int i; 对于(i=1;i在for循环的每次迭代中,fork只被调用一次。对于fork的每次调用,都会创建一个新进程;最后生成多少进程取决于循环的长度 如果循环的长度为1,则只会创建一个新进程,
int main(void)
{
int i;
for(i=1; i<=42; i++)
{
fork();
}
return 0;
}
int main(无效)
{
int i;
对于(i=1;i在for
循环的每次迭代中,fork
只被调用一次。对于fork
的每次调用,都会创建一个新进程;最后生成多少进程取决于循环的长度
如果循环的长度为1,则只会创建一个新进程,总共有2个进程
如果循环的长度为2,则在第一次迭代时将创建一个新进程;然后每个进程将在下一次迭代时生成另一个进程,总共调用3个fork
,总共调用4个进程
正如您可能假设的那样,在每次迭代中,进程的数量都会翻倍;如果n
是循环的长度,我们说的是进程的总数将是f(n)=2^n
(产生2^n-1
进程).让我们通过归纳来证明它是正确的。我们已经看到,这个公式适用于n=1
和n=2
。让我们假设它适用于n
,并证明它适用于n+1
如果长度为n+1
,则在第一次迭代时会产生一个新的过程,因为总共有两个过程仍有n
迭代要做,这意味着(通过归纳假设)每个过程将产生2^n-1
过程,这意味着总共2^(n+1)-2个
进程将在最后的n个
迭代中产生;我们已经有2个进程,这意味着创建的总进程(包括主进程)将是2^(n+1)-2+2=2^(n+1)
总之,对于长度n
的循环,我们有2^n-1
调用fork
,这意味着在您的情况下,我们有2^42-1
主进程及其子进程产生的新进程。使用此程序获得答案:
#include<stdio.h>
#include<math.h>
int main()
{
float sum=0;
int i;
for(i=1;i<=42;i++)
{
sum = sum + pow(2,i);
printf("fork call:%d, processes:%1.f\n",i,sum);
}
return 0;
}
//When fork call is 42 the processes will be 8796093022208
#包括
#包括
int main()
{
浮点数和=0;
int i;
对于(i=1;i您认为创建了多少个?子进程在生成时是否也调用fork语句。?正如我们所知,子进程获取父进程的完整副本。因此,在获取父进程副本时,子进程将获取fork语句。子进程是否调用此fork语句?是的,子进程也将调用fork语句t、 是不是应该是2^42,你写的一半?谢谢你的帮助。谢谢你的帮助。