1

谁能详细解释我的叉子工作

#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 循环)

4

3 回答 3

2

是的,每个孩子都会继续循环,但这里的关键词是“继续”。变量i将被第一个孩子继承,然后增加,这个增加的值被第二个孩子继承,等等。

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

于 2013-09-19T09:57:07.103 回答
0

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

所以它会停止一天;)

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

于 2013-09-19T09:59:17.447 回答
0

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

于 2013-09-19T12:03:22.877 回答