c - fork 过程中的不同输出

标签 c linux process fork pid

我在下面的附加代码中得到了不同数量的输出。有时它打印 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 调用来实现它。

最佳答案

#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

关于c - fork 过程中的不同输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28580510/

相关文章:

linux - QThread::start(priority) 与 Linux

c# - 通过在 C# 中单击获取进程窗口句柄

recursion - 我可以在方案中使这个迭代过程递归吗?

c++ - C vs C++ 在 VS2015 中使用 cl 编译器

c++ - CvCvtColor(srcImage,destImage,CV_BGR2Lab)不工作

linux - 构建 busybox,包括内核头文件、要包含哪些文件

c# - 多任务环境中的流程执行

C strstr 无法正常工作

android - boost 信号 : Connect fails

linux - shell 脚本 : Generate Report Version