多叉语句

时间:2015-03-22 12:40:58

标签: c fork

此代码除了原始代码外还创建了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是第一代叉子的第一代孩子

1 个答案:

答案 0 :(得分:2)

这是因为,如果,每个过程只能打印一行而4个过程意味着4行。

你应该替换:

else if(pid2 == 0) {

人:

 if(pid2 == 0) {

必须对pid和pid2进行两次测试,以便每个进程打印2行。