Причина в том, что когда вы вызываете std::cout<<
, он на самом деле не выполняет сам вывод, а данные остаются в буфере в системе.Когда вы выполняете форк, копируются и код, и данные, а также все связанные буферы.Наконец, и отец, и сын сбрасывают их на стандартный вывод, и, таким образом, вы видите дублированный вывод.