Proces potomny dostaje do dyspozycji własną kopię obszaru danych i kodu procesu nadrzędnego, a także kopie deskryptorów otwartych plików i połączeń sieciowych.
Nie jest w stanie zniszczyć danych programu nadrzędnego, bo działa na własnej kopii.
To, że proces potomny może zmienić zawartość pliku otwartego przez proces nadrzędny jest oczywiste, programista powinien wziąć to pod uwagę.
W przypadku otwartych plików i połączeń sieciowych sytuacja nie jest już tak jasna. Dla przykładu:
mysql_init (&mysql);
mysql_real_connect (&mysql, "localhost", "rcp", "Akuku", "rcp", 0, NULL, 0)
if (! (m = fork()) )
{
// proces potomny, coś robi, po czym wysyła zapytanie do bazy danych
sprintf(buf, "Select * from wydzialy where idw > 100);
mysql_query (&mysql, &buf[0]);
}
else
{
// proces nadrzedny, coś robi, po czym też wysyła zapytanie do bazy danych
sprintf(buf, "Select id_drzwi from drzwi where nr_drzwi=23");
mysql_query (&mysql, &buf[0]);
}
Jeśli zapytanie do bazy danych z jednego procesu zostanie zadane w trakcie wykonywania zapytania przez drugi proces, nic dobrego z tego nie wyniknie.
Oba procesy korzystają z tej samej struktury MYSQL, nasz program 'wybuchnie', motor bazy danych nie spodziewa się dwu zapytań na tym samym połączeniu w tym samym czasie.
Jeśli zapytania nie będą sie zdarzały w tym samym czasie, wszystko będzie OK.
English