while 循环后的代码未在我的 C 代码的分叉过程中打印

Code after while loop not printing in forked process of my C code

这里是菜鸟。代码应打印“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);
    }

可能在执行 execl 之前没有刷新 stdout 和 stderr。在 execl 之前尝试 fflush(stdout) 和 fflush(stderr)。

此行为的原因是打印速度很慢,而 printf() 实际上打印到一个缓冲区,该缓冲区稍后会一起刷新。