我在这里看到了很多 fork for 循环的例子,但没有太多说明它是如何做的。让我们使用 How to use Fork() to create only 2 child processes? 的答案中的这个简单示例举个例子。
for (i = 0; i < n; ++i) {
pid = fork();
if (pid) {
continue;
} else if (pid == 0) {
break;
} else {
printf("fork error\n");
exit(1);
}
}
我见过的大多数示例都遵循这种通用格式。但我不明白的是,这如何防止子进程也 fork ?据我了解,每个被创建的 child 也必须经历这个循环。但是 fork() 在 for 循环的最开始被调用,然后进行 3 次比较。有人可以解释一下,即使 children 似乎调用了 fork(),这个 for 循环仍然确保只有 parent 可以创建 child 吗?
最佳答案
child 从 fork
之后的行开始。 fork
为 child 返回 0
。在您的示例中, child 将进入 pid == 0
block 并 break
退出 for
循环。
在 fork
之后,子进程和父进程的一切都完全相同(包括下一条要执行的指令和变量值)。唯一的区别是 fork 的返回值(0
代表 child , child 的 pid 代表 parent )。
关于c - 在 for 循环说明中 fork ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39667175/