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