我在下面附带的代码中获得了不同数量的输出。有时它打印6个PID或有时8个PID。 所需的输出是7 PID&#39> 。虽然有时我能够得到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调用来实现它。
答案 0 :(得分:1)
您忘记包含所需的头文件。要使用fork()
,您需要
#include <sys/types.h>
#include <unistd.h>
有了这个,我就能得到预期的输出。
也就是说,在您的代码中,您似乎不等待完成子进程。
您需要在父进程中进行wait()
调用,以等待子进程执行完毕。
此外,它不是void main()
,实际上是int main(void)
。最后return 0
是一种很好的做法。
答案 1 :(得分:1)
#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