После второго fork (), какие будут значения pid1 & pid2?
Это зависит от того, о каком процессе вы говорите. Здесь есть четыре процесса (включая оригинал) со следующими отношениями между ними:
A (original process)
` - B (created by first fork in original process)
| ` - C (created by second fork in B)
` - D (created by second fork in original process)
То же самое в A, pid1 > 0
и pid2 > 0
, потому что это создавало новые процессы на каждом форке.
В B pid1 == 0
и pid2 > 0
, поскольку он был создан первым форком и создал новый процесс во втором форке.
В C pid1 == 0
и pid2 == 0
, поскольку он наследует значение pid1
от своего родителя (B) и был создан вторым форком.
В D, pid1 > 0
и pid2 == 0
, поскольку он наследует значение pid1
от своего родителя (A) и был создан вторым ответвлением.
И, конечно, помните, что это только начальные условия. Каждый процесс имеет свою собственную копию значений, поэтому, хотя процесс наследует начальное значение некоторой переменной от своего родителя, он все равно может быть изменен после разветвления, не затрагивая копию родителя.