Jeśli ktoś nie wierzy, że procesy są dwa, znów troszeczkę zmodyfikujemy nasz testowy programik:
main (argc, argv) { printf("Jestem pierwotnym procesem, zrobię sleep 10 sekund\n"); sleep(10); int m; if (! (m = fork()) ) { printf("Jestem procesem potomnym, moj PID to %i\n", getpid()); printf("Jestem procesem potomnym, zrobię sleep na 10 sekund\n"); fflush(0); sleep(10); } else { printf("Jestem procesem nadrzednym, uruchomilem proces potomny o PID %i\n", m); printf("Jestem procesem nadrzednym, zrobię sleep na 10 sekund\n"); fflush(0); sleep(10); } }
Dodaliśmy 10 sekund sleep przed fork() i po nim, da nam to czas na zatrzymanie procesu (procesów) i sprawdzenie, czy są (CTRL Z z klawiatury i ^Z na kopii ekranu).
root@mobile3:/home/rcp# ./test_fork Jestem pierwotnym procesem, zrobię sleep 10 sekund ^Z [1]+ Stopped ./test_fork root@mobile3:/home/rcp# ps ax|grep test_fork 10952 pts/0 T 0:00 ./test_fork 10958 pts/0 S+ 0:00 grep test_fork root@mobile3:/home/rcp# fg ./test_fork Jestem procesem nadrzednym, uruchomilem proces potomny o PID 10960 Jestem procesem nadrzednym, zrobię sleep na 10 sekund Jestem procesem potomnym, moj PID to 10960 Jestem procesem potomnym, zrobię sleep na 10 sekund ^Z [1]+ Stopped ./test_fork root@mobile3:/home/rcp# ps ax|grep test_fork 10952 pts/0 T 0:00 ./test_fork 10960 pts/0 T 0:00 ./test_fork 10963 pts/0 S+ 0:00 grep test_fork
Widzimy wyraźnie jeden proces test_fork podczas pierwszego sleep i dwa podczas drugiego.