c - ветвление () код

void main ()
{
   if ( fork () )
   {
       printf ( "PID1 %d\n", getpid () );
   }
   else
   {
       printf ( "PID2 %d\n", getpid () );
   }
}

Что делает этот код? Я знаю, что это имеет некоторое отношение к идентификаторам процесса, но разве ветвление не должно возвращать что-то в условие определить, является ли это ребенком/родительским процессом?

6
задан tm1 9 March 2010 в 12:51
поделиться

3 ответа

Возвращаемое значение fork () указывает, является ли процесс родительским или дочерним. Таким образом, дочерний элемент всегда будет печатать «PID2 0», потому что, если fork () возвращает 0, выполняется вторая часть оператора if.

-2
ответ дан 8 December 2019 в 13:45
поделиться

Приведенный выше код создает новый процесс при выполнении вызова fork, этот процесс будет почти точной копией исходного процесса.Оба процесса будут продолжать выполняться отдельно в форме возврата, вызове fork, который вызывает вопрос: «Как мне узнать, новый ли я процесс или старый?» так как они почти идентичны. Для этого разработчики вилки заставили вызов вилки возвращать разные вещи в каждом процессе, в новом процессе (дочернем) вызов вилки возвращает 0, а вилка исходного процесса (родительский) возвращает идентификатор нового процесса, чтобы родитель мог взаимодействовать с ним.

Таким образом, в коде вызов fork создает дочерний процесс, оба процесса выполняют оператор if отдельно. В родительском элементе возвращаемое значение не равно нулю, поэтому родительский элемент выполняет оператор if. В дочернем элементе возвращаемое значение равно 0, поэтому он выполняет инструкцию else. Надеюсь, это поможет: -)

3
ответ дан 8 December 2019 в 13:45
поделиться

Обычно это:

pid_t pid = fork();
if(pid == 0) {
  //child
} else if(pid > 0) {
  //parent
} else {
 //error
}

На странице руководства сказано:

RETURN VALUE
   Upon successful completion, fork() shall return 0 to the child 
   process and shall return the process ID of the child process to the 
   parent process.  Both processes shall continue to execute from 
   the fork() function. 
   Otherwise, -1 shall be returned to the parent process, no child process 
   shall be created, and errno shall be set to indicate the error.
16
ответ дан 8 December 2019 в 13:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: