Bogusław Kempny

fork()

Autor adres
Początek HC-SR04 LCD Kamera fork() sms strfry() GPIO impulsy Klawiatura Brama GPIO PWM SG90 ....











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.