叉呼叫工作

时间:2013-09-19 09:53:55

标签: 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)             //parent process
    {
      wait ();
      printf ("\nparent %d", getpid ());
    }
    else
      printf ("\nchild %d %d", getpid (), getppid ());
  }
  return 0;
}

它只是我需要知道如果fork与父代码具有相同的代码,那么这个for循环应该永远不会停止创建子进程(每个子进程都有自己的for循环)

3 个答案:

答案 0 :(得分:2)

是的,每个孩子都会继续循环,但这里的操作词是“继续”。变量i将由第一个子项继承,然后增加,并且此增加的值将由第二个子项等继承。

在子节点中也会发生同样的情况,因为i是继承的,并保持父进程的值。这意味着循环将很快在所有孩子中结束。

答案 1 :(得分:0)

当您fork时,子进程将继续使用与父进程相同的下一条指令和值。

所以有一天它会停止;)

看一下类似的问题:fork in a for loop

答案 2 :(得分:0)

是的虽然父代码和子代码是相同的但是在父代中,fork返回子进程id,因此在父代码中,变量b包含子代的pid而在子代中,fork返回0,因此在子代码中段变量b将为0,因此我们可以实现不同的工作,即使分叉在子节点中具有相同的父代码。