c - 在 for 循环说明中 fork

标签 c linux function fork systems-programming

我在这里看到了很多 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/

相关文章:

c - 使文件/命令/可执行文件受密码保护

java - 在不进行过多 JNI 调用的情况下使用 LWJGL

linux - 如何在 .gitconfig 代理身份验证中转义特殊字符

objective-c - 错误 : redefinition of ‘struct StructName’ message when compiling in Objective-C on Linux

python - 在Python中创建一系列弧度值

创建 argv[] 以将参数发送到另一个函数

c - 为什么核心配置文件不起作用?

具有运算符关联性和优先级的 C 函数求值顺序

python - 在 Linux 中使用 python 正则表达式未检测到表情符号

c++ - 我应该更改函数参数的值吗?