Следующая программа 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](https://i.stack.imgur.com/ZJIxo.png)
Но моя другая машина работает по-другому, как показано ниже.
![enter image description here](https://i.stack.imgur.com/aX9Gg.png)