在条件中使用 fork() 时,程序中创建了多少个进程?
How many processes are created in the program when using fork() in a condition?
我无法理解 fork() 用作条件时的工作原理。我知道 fork() 创建一个子进程作为父进程的精确副本。我的问题是,在下面的程序中创建了多少个进程?这是代码:
int global = 0;
int main() {
while(global < 5 && !fork()) {
sleep(1);
global += 1;
}
printf("%d\n", global);
return 0;
}
我假设对于每个 fork() 调用,每个已经 运行 的进程都会创建一个子进程并继续这样,只要变量 global 达到值 5。
fork()
在 child 中调用 returns 0,在 parent 中调用 child 的 pid
。
因此,在parent中,第二个条件的计算结果为0,循环退出,然后打印。在 child 中,第二个条件将评估为 non-zero,并且循环将再次使用更高的全局值(继承)进行分叉。
因此,除了parent之外,我们还会看到总共5个新进程。
我无法理解 fork() 用作条件时的工作原理。我知道 fork() 创建一个子进程作为父进程的精确副本。我的问题是,在下面的程序中创建了多少个进程?这是代码:
int global = 0;
int main() {
while(global < 5 && !fork()) {
sleep(1);
global += 1;
}
printf("%d\n", global);
return 0;
}
我假设对于每个 fork() 调用,每个已经 运行 的进程都会创建一个子进程并继续这样,只要变量 global 达到值 5。
fork()
在 child 中调用 returns 0,在 parent 中调用 child 的 pid
。
因此,在parent中,第二个条件的计算结果为0,循环退出,然后打印。在 child 中,第二个条件将评估为 non-zero,并且循环将再次使用更高的全局值(继承)进行分叉。
因此,除了parent之外,我们还会看到总共5个新进程。