fork()'示例

时间:2019-12-07 19:06:03

标签: c linux fork system-calls

我在理解以下代码时遇到了一些麻烦。如果我使用单个参数(argc为2)运行程序,则for fork()运行两次,并创建2个子进程。因此,总流程应为 3 ,对吗?但是我的教授说他们应该是 4 。我不明白为什么。

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

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

    return 0;
}

1 个答案:

答案 0 :(得分:0)

  

有人可以逐步解释吗?

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

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

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

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

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

进程总数:4。