Fork Issue - 执行fork()之后,fork之前的命令也会运行两次

时间:2014-09-21 05:08:17

标签: c linux fork

这是输出---

家长:我的pid是4525 家长:我父母的pid是3350 帕兰特开始 - 4525 3350 前叉 在Fork之前  儿童4526 4525 在父母 ---父母结束---

当我尝试执行以下代码---

void main(int argc, char *argv[])
{
    int status;
    pid_t my_pid, parent_pid,child_pid;

    my_pid = getpid();
    parent_pid = getppid();
    printf("\nParent: my pid is %d", my_pid);
    printf("\nParent: my parent's pid is %d", parent_pid);
    printf("\nparant started- %d    %d",my_pid,parent_pid);
    printf("\nBefore Fork");

    if((child_pid = fork()) < 0 )
    {
        perror("fork failure");
        exit(1);
    }

    if(child_pid == 0)
    {
        printf("\n Child %d %d\n",getpid(),getppid());

    }
    else
    {
        printf("\nIn parent");
        wait(&status);
        printf("\n---Parent End---\n");
    }

}

为什么前叉打印两次?感谢

1 个答案:

答案 0 :(得分:4)

这是因为你没有在fork()之前刷新输出缓冲区。改为:

printf("\nBefore Fork\n");

或:

printf("\nBefore Fork");
fflush(stdout);