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 ....











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.