fork
клонирует текущий процесс.Новый процесс будет «запускаться» при вызове fork
, а не при запуске main
, как вы, вероятно, ожидаете.Таким образом, когда вы печатаете в первый раз, есть 1 процесс, затем, когда вы выполняете форк, есть два.
Поскольку после печати "text1"
вы fork
, он печатается только один раз.
Во втором примере дублированный вывод связан с буферизацией вывода - printf фактически не выводитчто-нибудь на экране, пока он не будет сброшен или не достигнет новой строки ('\n'
).
Следовательно, первый вызов printf
фактически просто записывает данные в буфер где-то, затем данные копируются во второйадресное пространство процесса, а затем второй вызов printf
очистил бы буфер, завершив "text1"
в обоих буферах.