Что означает, когда они говорят, что он возвращается дважды, так это то, что вызов возвращается один раз в родительском процессе (который вызвал его) и один раз в дочернем процессе (который этого не сделал, хотя вы, вероятно, можете утверждать, что дочерний процесс унаследовалакт вызова fork
от родителя точно так же, как он унаследовал многое другое).
Фрагмент кода использует тот факт, что получает другое возвращаемое значение от fork
в зависимости от того, являетесь ли вы родителемпроцесс или дочерний процесс.
дочерний процесс получает ноль, а родительский процесс получает ненулевой идентификатор процесса дочернего процесса.
Вы также можете получить -1, если fork
по какой-то причине не удается, и в этом случае ребенок не будет работать.Это то, что вы, вероятно, должны также проверить.
И, в то время как fork
используется для создания новых процессов, это семейство вызовов exec
, которые загружают новые программы в эти процессы: fork
сам по себе не может этого сделать.
Хороший обзор процесса можно найти здесь .