【问题标题】:fork()'ing examplefork()'ing 示例
【发布时间】:2020-04-01 09:37:54
【问题描述】:

我无法理解以下代码。如果我使用单个参数(argc of 2) 运行程序,for fork() 会运行两次并创建 2 个子进程。所以总进程应该是3,对吧?但是我的教授说他们应该是4。我不明白为什么。

如果其中一个子进程创建了另一个 fork(),为什么不创建第二个呢?当我们的程序带有两个参数时会发生什么?有人可以逐步解释吗?

#include <unistd.h>
int main(int argc, char *argv[])
{
    int c;
    for (c = 0; c < argc; c++) {
        (void) fork();
    }

    return 0;
}

【问题讨论】:

标签: c linux fork system-calls


【解决方案1】:

有人可以逐步解释吗?

第 1 步: 进程 1 在 c = 0 时调用 fork()。进程 2 被创建为当前状态的副本。

第 2 步: 进程 1 在 c = 1 时调用 fork()。进程 3 被创建为当前状态的副本。

第 3 步: 进程 2 在 c = 1 时调用 fork()。进程 4 被创建为当前状态的副本。

第 4 步:进程 3 从c = 1 开始,因此for 循环在将其递增到c = 2 后终止,不再创建任何进程。

第 5 步:进程 4 从c = 1 开始,因此for 循环在将其递增到c = 2 后终止,不再创建任何进程。

进程总数:4.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-15
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多