Ale procesy dziecka i rodzica znajdują się w różnych przestrzeniach pamięci. Te przestrzenie pamięci mają tę samą zawartość, a wszelka operacja jest wykonywana w jednym procesie, nie wpłynie na inny proces.
Po utworzeniu procesu dziecka; Teraz oba procesy będą miały ten sam licznik programu (PC), więc oba te procesy wskazują na tę samą instrukcję. Pliki otwarte przez proces nadrzędny będą takie same w przypadku procesu potomnego.
Proces dziecka jest dokładnie taki sam jak jego rodzic, ale istnieje różnica w procesach ID:
Właściwości procesu dziecięcego
Oto niektóre z właściwości, które utrzymuje proces dziecka:
Właściwości, które nie są dziedziczone przez proces dziecięcy
Oto niektóre z właściwości, które nie są dziedziczone przez proces dziecka:
Fork () w c
W Fork () nie ma żadnych argumentów, a typ powracania widelca () to liczba całkowita. Musisz dołączyć następujące pliki nagłówka, gdy używany jest Fork ():
#włączaćPodczas pracy z Fork () można użyć do typu PID_T dla procesów identyfikator jako PID_T jest zdefiniowany w .
Plik nagłówka jest miejscem, w którym definiuje się Fork (), więc musisz go dołączyć do swojego programu, aby użyć Fork ().
Typ powrotu jest zdefiniowany w wywołaniu i widelec () jest zdefiniowany w . Dlatego musisz dołączyć oba w swoim programie, aby użyć połączenia systemowego Fork ().
Składnia widelca ()
Składnia wywołania systemu Fork () w Linux, Ubuntu jest następujący:
PID_T Fork (void);W składni typ powrotu jest PID_T. Po pomyślnym utworzeniu procesu dziecka PID procesu dziecięcego jest zwracany w procesie nadrzędnym, a 0 zostanie zwrócony do samego procesu dziecka.
Jeśli wystąpi jakikolwiek błąd, -1 jest zwracany do procesu nadrzędnego, a proces dziecięcy nie jest tworzony.
Nie są przekazywane żadne argumenty na Fork ().Przykład 1: Wezwanie Fork ()
Rozważ poniższy przykład, w którym użyliśmy wywołania systemu Fork (), aby utworzyć nowy proces dzieci:
#włączaćWYJŚCIE:
Sysads@Linuxhint $ GCC Fork.C -O ForkW tym programie użyliśmy Fork (), stworzy to nowy proces dzieci. Po utworzeniu procesu dziecka zarówno proces nadrzędny, jak i proces dziecka wskazują na następną instrukcję (ten sam licznik programu). W ten sposób pozostałe instrukcje lub instrukcje C zostaną wykonane przez całkowitą liczbę czasów procesu, czyli 2N razy, gdzie n jest liczbą wywołań systemu widelec ().
Więc gdy wywołanie widelec () jest używane jeden raz jak wyżej (21 = 2) Będziemy mieli wyjście 2 razy.
Tutaj, gdy użyto wywołania systemu Fork (), wewnętrzna struktura będzie wyglądać jak:
Rozważ następujący przypadek, w którym widelca () jest używany 4 razy:
#włączaćWyjście:
Sysads@Linuxhint $ GCC Fork.C -O ForkTeraz całkowita liczba utworzonych procesów to 24 = 16 i mamy naszą instrukcję drukowania 16 razy.
Przykład 2: Testowanie, jeśli Fork () zakończył się powodzeniem
W poniższym przykładzie wykorzystaliśmy konstrukcję decyzyjną do przetestowania wartości (int) zwróconej przez Fork (). I wyświetlane są odpowiednie komunikaty:
#włączaćWYJŚCIE:
Sysads@Linuxhint $ GCC Fork.C -O ForkW powyższym przykładzie użyliśmy typu PID_T, który będzie przechowywać wartość zwracaną Fork (). Fork () jest nazywany online:
p = rozwidlenie ();Tak więc wartość liczb całkowita zwrócona przez Fork () jest przechowywana w P, a następnie P jest porównywana w celu sprawdzenia, czy nasze połączenie Fork () zakończyło się powodzeniem.
Gdy połączenie Fork () jest z powodzeniem tworzone, proces identyfikator dzieci zostanie zwrócony do procesu nadrzędnego, a 0 zostanie zwrócony do procesu dziecka.Identyfikator procesu dziecka w procesie nadrzędnym nie będzie taki sam, jak identyfikator procesu dziecka w samym procesie dziecka. W procesie dziecka identyfikator procesu dziecka wyniesie 0.
W tym samouczku możesz zobaczyć, jak zacząć od połączenia systemu widelca w Linux.