Учитывая показанный код, вы должны увидеть восемь лотов по 6 (вы написали i = i + 2;
вместо i = i * 2;
для последнего вычисления.
Поскольку каждый процесс следует по одному и тому же пути кода, каждый процесс будет выдавать один и тот же результат.
Чтобы получить ожидаемый результат, вам нужно отследить, дал ли каждый fork()
родительский или дочерний процесс:
int i = 1;
if (fork())
{
i=i*2;
if (fork())
{
i=i*2;
if (fork())
i=i*2; // + --> *
}
}
printf(|%d\n", i);
Я предполагаю, что с операцией fork()
проблем нет. Также интересно отметить, что вы можете инвертировать любое или все условия и в итоге получить тот же результат.