【发布时间】:2023-03-22 19:34:01
【问题描述】:
在运行以下代码时:
#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。
接下来,两个进程在第二个分叉上创建另一个子进程(p2 和 p3)。两个新的子进程 p2 p3 增加 x 的副本,即 x 的副本变为 2。但是p0 和p1 呢?他们不增加值吗?
接下来是什么? p4 和 p5 的值如何递增?有人可以解释一下吗?
【问题讨论】:
标签: c linux unix fork system-calls