Как правильно считать процессы, созданные fork? - PullRequest
0 голосов
/ 19 июня 2019

У меня возникли проблемы с кодом C, касающимся процессов, созданных с помощью форка, предоставленного нашим профессором для определения количества процессов, которые он создает.

pid1 = fork();

if (pid1 != 0) {
   pid2 = fork();
   pid3 = fork();
}
else {
   pid4 = fork(); 
}

1 Ответ

2 голосов
/ 19 июня 2019

Выполнение кода только несколько полезно (и не может быть сделано во время экзамена!) - лучше нарисовать дерево процессов. Правила таковы, что каждый дочерний процесс начинает выполнение после вызова fork, который его породил, у родителей ненулевой pid, а у детей pid равен нулю.

         main
       /   |   \
    pid1 pid2 pid3
     /     |
  pid4   pid3

Мы можем видеть main порождающих трех детей, pid1, pid2 и pid3 (pid1 тривиален, а два других появляются в блоке if). pid1 переходит к условной части else и порождает pid4 перед завершением. pid2 - единственный трюк: он снова появляется в pid3, потому что там начинается его выполнение.

Ответ:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...