exit kończy działanie wywołującego procesu, zwalnia
odpowiednie struktury, pamięć, zamyka pliki itp, a także
(opcjonalnie) zapisuje informacje o procesie do pliku
księgowania. Jako jedyny parametr bierze kod wyjścia programu.
Jesli nie jest wywołany przez programistę, zostanie wywołany
niejawnie po opuszczeniu funkcji main().
exit jest zdefiniowane w pliku unistd.h. Schemat wywołań jest
zależny od architektury (np. na i386 wykorzystywane jest
wywołanie pośrednie poprzez procedurę obsługi przerwania 80h)
jednak sprowadza się to zawsze w ostateczności do procedur
zadeklarowanych w pliku exit.c: sys_exit i do_exit. do_exit
składa się z wywołań podprocedur dokonujących różnych
czynności porządkowych i kończących dla aktualnego procesu.
Ta procedura nigdy nie zwraca sterowania. Operuje ona (i jej
podprocedury) na polach struktury task_struct aktualnego procesu.
Algorytm:
Uwaga: do_exit panikuje przy próbie wywołania z prosesów idle
i init oraz z procedury obsługi przerwania.
Szczegóły:
Tworzy, wypełnia i zapisuje do pliku księgowania strukturę z
informacjami o procesie. Jest wywoływana jeśli zdefiniowano
makro CONFIG_BSD_PROCESS_ACCT
z acct.h :
struct acct
Zeruje pole mm w strukturze procesu, i zwalnia pamięć jeśli
nikt więcej z niej nie korzysta.
Odwraca wszytkie operacje semaforowe zapamiętane w
current->semundo i usuwa proces z kolejki czekających na
semaforze.
3.4 static inline void
__exit_files(struct task_struct *tsk)
Zeruje pole files w strukturze procesu i zwalnia (zamyka) pliki,
jeśli żaden inny proces z nich nie korzysta.
Zeruje pole fs w strukturze procesu i zwalnia tę strukture
jeśli żaden inny proces z niej nie korzysta.
Zwalnia strukturę przechwującą informacje o sygnałach.