C编程叉示例

时间:2019-05-21 00:26:56

标签: linux systems-programming

运行以下程序时,将创建多少个进程?我无法解决。如果您有帮助,我将不胜感激

int main()
{ 
   int i;
   for (i=fork(); i<2; i++ )
      fork();
}

1 个答案:

答案 0 :(得分:-1)

fork()创建一个子进程,并创建父进程的另一个实例。它向子级返回0,并向父级返回子级的PID。

在这种情况下,当执行 i = fork()时, 父级被分配给我作为子进程的PID,它很可能大于1。即使 i <2 失败,父级中的for循环也不会运行。此时有两个进程P和C1(子进程)

由父级执行派生后,子级将获得0作为返回值,i =0。这意味着条件 i <2 成功。子级在循环体内执行fork(),创建C2。 C1和C2中i的值均为0。i递增为1。

C1和C2执行 i <2 ,此条件成功。叉由两个执行。 C3由C1生成,C4由C2生成。

i的值增加到2。i <2失败。他们都跳出了循环

总而言之,此程序创建了4个子进程。您可以使用以下程序尝试此操作,在该程序中您将看到5个PID正在打印。

    #include <stdio.h>
    main()
    {
       int i = 0;
       for (i = fork(); i < 2; i++)
          fork();
       printf("Hello World i %d\n", getpid());
    }