Bogusław Kempny

fork()

Autor adres



Początek HC-SR04 LCD Kamera fork() sms strfry() GPIO impulsy Klawiatura ....










Najciekawsza dla mnie funkcja biblioteki glibc, fork()

Co robi? Ano prostą rzecz, kopię procesu, który jej użył.

Powstają dwa w zasadzie identyczne procesy, mają identyczne kopie danych, identyczny kod, dostęp do wszystkich otwartych uprzednio plików... I tu właśnie piękno i swoista magia funkcji fork().

To trochę jak w książkach Science Fiction, mamy dwa identyczne klony astronauty po nieudanej teleportacji. Astronauta pojawił sie na planecie w odległej galaktyce, ale wskutek awarii sprzętu nie zniknął na Ziemi.
Obaj mają tę samą wiedzę, doswiadczenie, imię, nazwisko, wspólną przeszłość aż do momentu teleportacji.

Obaj zrobią to, co po teleportacji zaplanowali zrobić. Obaj uważają się za ten jeden, jedyny, oryginalny egzemplarz, a nie klon oryginału.

Jak to działa? Napiszmy prościutki programik:

#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>


main (argc, argv)
{
  printf("START!\n");
  fork();
  printf("Jestem procesem nadrzednym, moj PID to %i\n", getpid());
}

Co zobaczymy na ekranie po jego skompilowaniu i uruchomieniu? Ano coś takiego:

root@mobile3:/home/rcp# ./test_fork 
START!
Jestem procesem nadrzednym, moj PID to 9364
Jestem procesem nadrzednym, moj PID to 9365

Napis "START" tylko jeden, ale dwa napisy "Jestem procesem nadrzędnym"!
"START" nasz proces wyświetlił przed wykonaniem fork.
Komunikat "Jestem procesem..." został wyświetlony po wykonaniu fork(). Działały juz dwa procesy, oba go wyświetliły!
Pochwaliły się nawet swoimi PID, 9364 i 9365.