когда вы вызываете fork
, он создает копию процесса таким образом, что обе копии program counter
находятся в одной и той же позиции в своих разделах кода. Следовательно, когда любая из этих копий возобновит выполнение, обе будут просто завершать вызов fork
.
Так что они оба должны работать одинаково.
НО, fork
возвращает 0
в дочернем процессе и pid
дочернего процесса в родительском процессе.
Это объясняет mojo позади if( pid==0 )
части.
Поэтому, когда дочерний процесс изменяет значение value
, он фактически меняет его в своей собственной копии (помните: процесс скопирован, поэтому скопированы и разделы данных).
Тем временем родительский процесс выполняется со своим старым значением value
, которое равно 10.
Даже после того, как ребенок изменил свою копию value
и умер, копия родителя по-прежнему 10.