Если предположить, что это опечатка, а while (i-- && p == fork())
действительно while (i-- && (p = fork()))
, то вывод зависит от планировщика ОС.
Основной процесс разветвляет процессы с
- i = 1 p = 0 <- процесс A, parent.p = A </li>
- i = 0 p = 0 <- процесс B, parent.p = B </li>
- i = -1p = B <- родительский процесс, parent.p = B </li>
Процессы A и B не продолжают цикл, поскольку p=fork()
для них оценивается как ложное.
Каждый процесс добавляет 2 к j (что также может быть j = 12).В итоге:
A: i=+1 p=0 j=12
B: i= 0 p=0 j=12
P: i=-1 p=*B* j=12
В случаях, когда p = 0, i и j умножены на 3, в случаях с p! = 0 (родительский процесс) они умножены на 2. Это дает в итоге следующееразумный вывод для меня:
i = -2, j = 24
i = 3, j = 36
i = 0, j = 36
(порядок будет несколько случайным)
Как указал острый зуб, ваш код, как написано, просто дает случайные результаты, в зависимости от частинеинициализированная память.