【发布时间】:2018-10-07 05:03:45
【问题描述】:
我写了代码来打印 pid 以parent->g3->c2->g1->g2->c1.
所以我使用了wait() 和waitpid()。但我失败了。
所以我写了“完成”代码来了解问题所在。
而且我知道 c1 会忽略 waitpid 并打印 what->finish。
我该如何解决这个问题
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <stdlib.h>
void main()
{
pid_t c1,c2,g1,g2,g3;
printf("parent:%d\n", (int)getpid());
c1=fork();
int status;
if (c1>0) {
c2=fork();
if (c2==0) {
g3=fork();
if (g3==0) {
printf("g3:%d\n",(int)getpid());
} else if (g3>0) {
wait(&status);
printf("c2:%d\n",(int)getpid());
}
}
} else if (c1==0) {
waitpid(c2,&status,WUNTRACED);
printf("what\n");
g1=fork();
if (g1>0) {
g2=fork();
if (g2==0) {
printf("g2:%d\n",(int)getpid());
} else if (g2>0) {
waitpid(g1,&status,WUNTRACED);
printf("c1:%d\n", (int)getpid());
}
} else if (g1==0) {
waitpid(g2,&status,WUNTRACED);
printf("g1:%d\n",(int)getpid());
} else {
printf("failed\n");
exit(1);
}
} else {
printf("main failed\n");
exit(1);
} printf("finish\n");
}
【问题讨论】: