运行以下代码时:
#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
fork
返回以下之一:
我认为您造成误解的关键在于fork系统调用的返回值。调用fork时,它将为新创建的进程(又名子进程)和旧进程(又名父级)返回不同的值。