理解 fork()

Understanding fork()

我对此代码有疑问:

int id = fork();
if (id != 0)
    fork();

printf("FORK: %d\n PID: %d\n PPID:%d\n", id, getpid(), getppid());

}

这是一个示例输出:

分叉:5888

PID: 5887

PPID:5239

分叉:0

PID: 5888

PPID:5887

分叉:5888

PID: 5889

PPID:5887

我理解的代码是这样的:

parent进程用int id = fork()创建;另一个过程。 因此,parent 进程具有 child 进程的进程 ID 作为 id 中的 return 值,而 child 进程的值为 0。 配合条件 if (id != 0) { fork(); } child 进程将在 parent 进程中再次创建。 因此,parent进程有两个“children”。 什么让我对输出感到困惑: 三个进程中的两个(PID 为 5888 和 5889)在 fork() 中的值不应该为 0,因为它们都是 child 进程吗? 此外,fork() 中 ID 为 5889 的进程的进程 ID 为 5888,但这是否意味着 5888 是 5889 的 child?

我可能只是不太明白 fork() 的原理,但如果您能提供帮助,我将不胜感激。

他们应该都有 id = 0 但你没有在第二个 fork 中分配 id。 对于第二个问题,pids没有特定的分配顺序,完全由内核管理。