pid = fork()
proces rodzic dostaje tutaj pid dziecka, a dziecko ma wartość zero. Zero chyba tylko po to żeby w programie można było odróżnić dziecko od rodzica, faktyczny pid będzie inny. fork() tworzy kopie/duplikat tego samego programu, gdybyśmy nie dali if (pid == 0) to najpierw rodzic wykonałby cały kod potomka, a potem swój, a faktyczny proces potomny wykonałby dokładnie to samo (oczywiście oba procesy mniej-więcej w tym samym czasie tj. współbieżnie).
Tak więc aby tak nie było fork() dla procesu potomnego daje 0, żeby program mógł rozróżnić go od rodzica, a rodzic dostaje pid dziecka.