next up previous
Next: Algorytm do_exit() Up: Opis działania exit() Previous: Opis działania exit()

Schematyczny opis działania

W funkcji do_exit() i exit_notify() korzysta się z następujących pól struktury task_struct:

p_cptr - Wskazuje na ostatnio utworzone dziecko.
p_osptr - Wskazuje na starszego brata procesu.
p_pptr - Wskazuje na ojca procesu.
p_opptr - Wskazuje na oryginalnego rodzica, lub an init.
p_ysptr - Wskazuje na młodszego brata.
state - Opisuje w jakim stanie znajduje się process. exit_code - Mówi o kodzie powrotu procesu.
exit_signal - przechowuje numer sygnału, który zostanie wysłany rodzicowi.

Ponadto current odnosi się do makro-definicji, która zwraca wskaźnik na aktualny proces.
Funkcja do_exit() wykonuje następujące czynności:

  1. Sprawdza czy zakończenie procesu jest dozwolone.
  2. Ustawia flagę procesu na PF_EXITING.
  3. Proces usuwany jest z kolejki dynamicznych zegarów.
  4. Jeśli trzeba to zapisuje informacje o usuwanym procesie na dysk.
  5. Po kolei zwalniane są zasoby procesu (pamięć, semafory, pliki, handlery przerwań).
  6. Jeśli proces korzystał z domeny wykonania, lub interpretera formatu to zmniejszane są liczniki odwołań do odpowiednich modułów.
  7. Wywoływana jest funkcja exit_notify, która uaktualnia strukturę task_struct procesu. Informuje ojca o śmierci dziecka. Jeśli dzieci procesu mają zostać osierocone to czyni ich ojcem process init . Ustawia flagę stanu procesu na TASK_ZOMBIE.


Subsections
next up previous
Next: Algorytm do_exit() Up: Opis działania exit() Previous: Opis działania exit()
Michal Rutkowski 2001-12-19