Почему hello world печатает только дважды и почему наибольшее значение 2
Чтобы ответить на ваш вопрос (после исправления проблемы (rc = 0)
против (rc == 0)
), возможно, помогите наметить, что происходит в вашем коде. Например:
parent
|
a = 1
if (rc == 0)
+--------------- child 1
| |
else +--------------- child 2
a++ a++ a++
a = 2 a = 2 a = 2
Hello World2 Hello World2 Hello World2
В родительском процессе вы fork
затем увеличиваете a
на a++
перед проверкой if (rc == 0)
, чтобы указать направление для дочернего процесса. Исходный родитель снова видит a++
из-за else
, а "Hello World2"
является результатом.
В первом дочернем элементе вы снова выполняете форк, но дочерний-1 (как родительский) и дочерний-дочерний 2 оба увеличивают a++;
перед выпадением из условия с "Hello World2"
результатом для обоих.
Похоже, вы пытались сделать что-то похожее на:
#include <stdio.h>
#include <unistd.h>
int main (void) {
int a = 1,
rc = fork();
if (rc == 0) {
a++;
rc = fork();
if (rc == 0)
a++;
}
printf ("Hello World %d\n", a);
}
Пример использования / Вывод
$ ./bin/forkcount
Hello World 1
Hello World 2
Hello World 3
Иногда карандаш и бумага так же полезны, как клавиатура. Дайте мне знать, если у вас есть дополнительные вопросы.