任何人都可以解释我详细解释叉子的问题
#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;
}
它只是我需要知道如果fork与父代码具有相同的代码,那么这个for循环应该永远不会停止创建子进程(每个子进程都有自己的for循环)
答案 0 :(得分:2)
是的,每个孩子都会继续循环,但这里的操作词是“继续”。变量i
将由第一个子项继承,然后增加,并且此增加的值将由第二个子项等继承。
在子节点中也会发生同样的情况,因为i
是继承的,并保持父进程的值。这意味着循环将很快在所有孩子中结束。
答案 1 :(得分:0)
答案 2 :(得分:0)
是的虽然父代码和子代码是相同的但是在父代中,fork返回子进程id,因此在父代码中,变量b包含子代的pid而在子代中,fork返回0,因此在子代码中段变量b将为0,因此我们可以实现不同的工作,即使分叉在子节点中具有相同的父代码。