C 叉叫工作
有人能详细解释一下叉子的工作原理吗C 叉叫工作,c,linux,fork,C,Linux,Fork,有人能详细解释一下叉子的工作原理吗 #include<unistd.h> #include<stdio.h> int main () { int i, b; for (i = 0; i < 2; i++) { fflush (stdout); b = fork (); if (b == -1) { perror ("error forking"); } else if (b > 0)
#include<unistd.h>
#include<stdio.h>
int main ()
{
int i, b;
for (i = 0; i < 2; i++) {
fflush (stdout);
b = fork ();
if (b == -1) {
perror ("error forking");
}
else if (b > 0) //parent process
{
wait ();
printf ("\nparent %d", getpid ());
}
else
printf ("\nchild %d %d", getpid (), getppid ());
}
return 0;
}
#包括
#包括
int main()
{
int i,b;
对于(i=0;i<2;i++){
fflush(stdout);
b=fork();
如果(b==-1){
perror(“错误分叉”);
}
else if(b>0)//父进程
{
等待();
printf(“\n租金%d”,getpid());
}
其他的
printf(“\n归档%d%d”,getpid(),getppid());
}
返回0;
}
只是我需要知道,如果fork与父循环有相同的代码,那么这个for循环就永远不会停止创建子进程(每个子循环都有自己的for循环)是的,每个子循环都会继续循环,但这里的关键词是“继续”。变量
i
将由第一个子级继承,然后增加,增加的值将由第二个子级继承,以此类推
同样的情况也会发生在子进程中,因为继承了
i
,并将其值保留在父进程中。这意味着循环将很快在所有子进程中结束。当您使用fork
时,子进程将继续执行与父进程相同的下一条指令和值
所以有一天它会停止;)
请看一个类似的问题:是,尽管父代码和子代码相同,但在父代码中fork返回子进程id,因此在父代码中,变量b包含子进程的pid,而在子代码中,fork返回0,因此,在子代码段中,变量b将具有0,因此我们可以实现不同的作业,即使分叉在子代码段中具有相同的父代码 @mrigendra父进程的整个内存,包括变量的位置(以及值),都被复制到子进程。因此,b的值是如何改变的,在父进程中,如果是子进程的pid,则子进程应该具有相同的b值。不,
b
在fork
返回后赋值,它在父进程和子进程中返回不同的值。但是,b
在调用返回之前,在父级和子级分叉点上具有相同(未初始化)的值。并且其他子级中的值是否对这些父级有影响,例如,如果子级中的i=1,则其父级版本的i也会更新为1?@mrigendra否,继承只会“向下”,一旦父母创建了孩子,他们就完全分开了。