此代码除了原始代码外还创建了3个进程。所以总共存在4个过程。据我所知,这段代码应该打印8个语句。但结果只有4个陈述。 我在这里失踪了什么?
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
// error checking is omitted
int main(int argc, char const *argv[])
{
pid_t pid, pid2;
fflush(stdout);// used to clear buffers before forking
pid = fork();
fflush(stdout);
pid2 = fork();
if(pid == 0) {
printf("%d is the first generation child from first fork\n", getpid());
}
else if(pid > 0) {
printf("%d is the original process\n", getpid());
wait();
}
else if(pid2 == 0) {
printf("%d is the 2nd generation child from the second fork by the first generation child \n", getpid());
}
else if(pid2 > 0) {
printf("%d is the first generation younger child from the 2nd fork by the original\n", getpid() );
wait();
}
return 0;
}
输出
4014是原始过程 4016是原始过程 4015是第一代叉子的第一代孩子 4017是第一代叉子的第一代孩子
答案 0 :(得分:2)
这是因为,如果,每个过程只能打印一行而4个过程意味着4行。
你应该替换:
else if(pid2 == 0) {
人:
if(pid2 == 0) {
必须对pid和pid2进行两次测试,以便每个进程打印2行。