while循环后的代码不能在我的C代码的分叉进程中打印

时间:2016-02-01 22:45:25

标签: c exec fork

C noob在这里。代码应该打印" C1:执行ls命令"以及执行ls -la命令的输出。但我也没有看到。循环中和循环之前的其他打印语句的输出工作正常。

C代码

    pid_t child1_pid = print_if_err(fork(), "fork");
    if (child1_pid == 0) {
        printf("\nChild Process 1\n");
        printf("Process ID: %d\n", getpid());
        printf("Parent Process ID: %d\n", getppid());

        sleep(2);
        int whale = 6;
        char new_whale[50];
        sprintf(new_whale, "%d", whale);
        setenv("WHALE", new_whale, 1);
        printf("C1: %d\n", whale);

        while(whale > 3) {
            sleep(3);
            whale = whale - 3;
            sprintf(new_whale, "%d", whale);
            setenv("WHALE", new_whale, 1);
            printf("C1: %d\n", whale);
        }

        print_if_err(chdir("/"), "chdir");
        printf("C1: executing ls command");
        execl("ls", "-l", "-a", NULL);

        _exit(0);
    }

1 个答案:

答案 0 :(得分:1)

执行execl之前,可能没有刷新stdout和stderr。在execl。

之前尝试fflush(stdout)和fflush(stderr)

这种行为的原因是打印速度很慢,而printf()实际打印到缓冲区,后来一起刷新。