Bogusław Kempny

fork()

×
Autor English
Początek HC-SR04 LCD Kamera fork() sms strfry() GPIO impulsy Klawiatura Brama GPIO PWM SG90 RFID Grafolog RCP Shutdown Temperatura ....











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.