分叉过程中的不同输出

Different outputs while forking process

我在下面的附加代码中得到了不同数量的输出。有时它打印 6 个 PID,有时打印 8 个 PID。 期望的输出是 7 个 PID。虽然有时我能得到 7 个 PID。

进程树:

          A
       /  |  \
      B   C   D
     / \  |
    E   F G

我的代码:

#include <stdio.h>

void main()
{
    int pidb=-1;
    if(fork()==0) pidb=getpid();
    fork();
    if(getppid()!=pidb) fork(); 
    printf("%d\n",getpid());
}

注意:假设fork调用成功。

[更新]

我们需要使用 3 个 fork 调用来实现它。

您忘记包含所需的头文件。要使用 fork(),您需要

   #include <sys/types.h>
   #include <unistd.h>

有了这个,我就能得到预期的输出。

也就是说,在您的代码中,您似乎没有等待子进程完成。

您需要在父进程中调用 wait() 以等待子进程完成执行。

此外,它不是 void main(),实际上是 int main(void)。最后的 return 0 是个好习惯。

#include <stdio.h>

    void main()
    {
        int pidb=-1;
        if(fork()==0) pidb=getpid();
        fork();
        if(getppid()!=pidb) fork();
        wait(NULL);  // Wait for all child process
        printf("%d\n",getpid());
    }

这就是你想要的。 这将打印这 7 个进程的 7 个 pid


最终的流程树是这样的

          A (First fork) 
       /    \
      B      c   (2nd fork) 
     / \     / \
    D   E    F  G  (3rd fork)
   / \  / \  /\   | 
   1  2 3 4  5 6  7