Pożytek z takiego klonowania jednak niewielki, nawet w książkach Science Fiction. Proces po fork() musi wiedzieć, czy jest procesem nadrzędnym, czy potomnym.
Wtedy proces nadrzędny będzie mógł kontynuować swoje główne zadanie, na przykład sprawdzać stan czujników temperatury w reaktorach, a proces podrzędny zająć się czasochłonnym dodawaniem kolejnych składników do reaktora który osiągnął właściwą temperaturę.
Na szczęście łatwo to zrobić.
fork() zwraca w procesie potomnym wartość 0, w procesie nadrzędnym PID procesu potomnego (dla porządku, może też zwrócić -1, jeśli zakonczył się błędem).
Zmodyfikujmy trochę nasz testowy programik:
main (argc, argv) { int m; if (! (m = fork()) ) { printf("Jestem procesem potomnym, moj PID to %i\n", getpid()); } else { printf("Jestem procesem nadrzednym, uruchomilem proces potomny o PID %i\n", m); } }
Po skompilowaniu i uruchomieniu już widzimy, że procesy połapały się kto jest kim:
root@mobile3:/home/rcp# ./test_fork Jestem procesem nadrzednym, uruchomilem proces potomny o PID 10212 Jestem procesem potomnym, moj PID to 10212
W procesie potomnym fork() zwrócił 0, w nadrzędnym 1022 (zachowaliśmy tę wartość w zmiennej 'm'). Tak właśnie fork() został użyty do robienia zdjęć w przykładowym serwerze kamer.