使用Fork()创建过程

问题描述 投票:1回答:2

运行以下代码时:

#include <stdio.h>
#include <unistd.h>
static int x = 0;
int main(int argc, char *argv[])
{
    pid_t p = getpid();
    fork();
    x++;

    if (! fork()) {
      x++;
      if (fork()) {
          x++;
      }
    }

    printf("p%d: x = %d\n", getpid() - p, x);
    sleep(60);
     return 0;
}

我得到以下输出:

p0: x = 1
p1: x = 1
p2: x = 3
p3: x = 3
p4: x = 2
p5: x = 2

我不太了解如何以及在何处增加值。 原始处理(p0)执行main()函数。第一个fork()创建一个子进程(p1)。然后,p0和p1都将x的副本设置为1。

接下来,两个进程都会创建另一个子进程在第二个fork上的(p2和p3)

。两个新的子进程p2和p3会增加x的副本,即x变为2的副本。但是关于p0和p1呢??它们不增加值吗?

接下来是什么? p4和p5

的值如何递增?有人可以解释一下吗?

运行以下代码时:#include #include static int x = 0; int main(int argc,char * argv []){pid_t p = getpid();叉子(); x ++;如果(!fork()){...

c linux unix fork system-calls
2个回答
5
投票

fork返回以下之一:


2
投票

我认为您造成误解的关键在于fork系统调用的返回值。调用fork时,它将为新创建的进程(又名子进程)和旧进程(又名父级)返回不同的值。

© www.soinside.com 2019 - 2024. All rights reserved.