理解 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没有特定的分配顺序,完全由内核管理。
我对此代码有疑问:
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没有特定的分配顺序,完全由内核管理。