Ваш терминал запускает ваше приложение и к нему подключены два файловых дескриптора, один для stdout и один для stderr.Затем он должен прочитать данные, которые ваше приложение выводит по этим файловым дескрипторам, и отобразить их на экране.Нет никакой гарантии, как терминальное приложение (или ОС в этом отношении) реализует это взаимодействие.Представьте себе, что терминал на самом деле имеет 2 потока, читающих из stdout и stderr параллельно.Порядок, в котором эти 2 потока будут получать данные из fds и на экран, не обязательно будет последовательным, когда ваше приложение выводит.