Когда вы форк
, ядро создает новый процесс, который является копией процесса разветвления, и оба процесса продолжают выполнение после форка
(с кодом возврата, показывающим, был ли произошла ошибка, и независимо от того, является ли запущенный код родительским или дочерним). Эта часть «продолжения выполнения» не обязательно происходит сразу: ядро просто добавляет новый процесс в очередь выполнения, и в конечном итоге он будет запланирован и запущен, но не обязательно немедленно.
Это объясняет оба поведения, о которых вы спрашиваете: