C программа по-прежнему пропускает некоторые выходные данные после очистки буфера ввода-вывода - PullRequest
1 голос
/ 27 марта 2020

Следующая программа C пропускает некоторые выходные данные даже после очистки буфера ввода-вывода.

#include <stdio.h>
#include <unistd.h>

void fork2() {
    printf("(L0 %d) ", getpid());
    fflush(stdout);
    fork();
    printf("(L1 %d) ", getpid());
    fflush(stdout);
    fork();
    printf("(Bye %d) ", getpid());
    fflush(stdout);
}

int main() {
    printf("parent: %d\n", getpid());
    fflush(stdout);
    fork2();
    fflush(stdout);
    return 0;
}

Ожидаемый вывод вышеуказанной программы аналогичен следующему, в котором имеется 7 кортежей.

parent: 26874
(L0 26874) (L1 26874) (Bye 26874) (L1 26875) (Bye 26876) (Bye 26875) (Bye 26877)

Однако я запускаю его несколько раз. Его вывод не всегда такой. Иногда он пропускает часть вывода в конце, как показано ниже, который содержит менее 7 кортежей.

parent: 26882
(L0 26882) (L1 26882) (Bye 26882) (L1 26883) (Bye 26884) (Bye 26883)

Почему программа пропускает некоторые выходные данные даже после очистки буфера ввода-вывода?

Won ' t программа гриппа sh автоматически буферизируется перед выходом?

[ОБНОВЛЕНИЕ]

Этот снимок экрана показывает мою оболочку, когда я запускаю несколько раз непрерывно.

screenshot

Но моя другая машина работает по-другому, как показано ниже.

enter image description here

...