Системный вызов fork() создает клон/копию существующего процесса. Теперь выполняются два процесса: одни и те же данные, местоположение в программе и образ процесса. Разница - это возвращаемое значение системного вызова fork().
Поскольку функция fork() возвращает разные значения родительскому процессу (forking) и дочернему (разветвленному) процессу, вы можете определить, выполняетесь ли вы в родительском или дочернем.
Процесс родительский (forking) получает результат fork() == childpid в родительском процессе, поэтому родитель знает идентификатор процесса дочернего элемента (и может, таким образом, убить его, дождаться его завершения и т. Д.). ,
Родитель может также получить результат fork() == -1, что указывает на сбой системного вызова fork().
Процесс child (forked) получает результат fork() == 0, когда в дочернем процессе, и если вы хотите узнать идентификатор процесса для ребенка, вы просто попросите текущий идентификатор процесса получить процесс id ребенка.
Вот связанный пост с образцом кода, который я опубликовал, How to use fork().
Тонкость заключается в том, что (a) неверно, потому что каждый из родителей и ребенка имеет идентификатор процесса, который не равен 0, но возврат из fork() всегда равен 0 в дочернем элементе. Поэтому может показаться, что в руководстве указано, что PID = 0. Часть (b) истинна. Часть (c) неверна, потому что она не является создателем процесса, которая копирует что-либо, это системный вызов (в контексте родительского процесса), который выполняет копирование.