table of contents
_exit(2) | System Calls Manual | _exit(2) |
NAZWA¶
_exit, _Exit - kończy bieżący proces
BIBLIOTEKA¶
Standardowa biblioteka C (libc, -lc)
SKŁADNIA¶
#include <unistd.h>
[[noreturn]] void _exit(int status);
#include <stdlib.h>
[[noreturn]] void _Exit(int status);
_Exit():
_ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
OPIS¶
Funkcja _exit() "natychmiast" kończy proces, z którego została wywołana. Wszystkie przynależące do procesu otwarte deskryptory plików są zamykane; wszystkie jego procesy potomne są przejmowane przez init (lub przez najbliższy proces dorzynający (subreaper), zgodnie z definicją użycia operacji PR_SET_CHILD_SUBREAPER prctl(2)). Jego proces macierzysty otrzymuje sygnał SIGCHLD.
Wartość status & 0xFF jest zwracana procesowi macierzystemu jako kod zakończenia procesu wywołującego tę funkcję i może zostać odczytana przez proces macierzysty za pomocą jednej z funkcji z rodziny wait(2).
Funkcja _Exit() jest równoważna _exit().
WARTOŚĆ ZWRACANA¶
Funkcje te nigdy nie powracają.
STANDARDY¶
- _exit()
- POSIX.1-2008.
- _Exit()
- C11, POSIX.1-2008.
HISTORIA¶
POSIX.1-2001, SVr4, 4.3BSD.
_Exit() wprowadzono w C99.
UWAGI¶
Efekty zakończenia, transmisja kodu zakończenia, procesy zombie, przesyłanie sygnałów itp. zostały przedyskutowane w exit(3).
Funkcja _exit() jest podobna do exit(3), ale nie wywołuje żadnych funkcji zarejestrowanych za pomocą funkcji atexit(3) lub on_exit(3). Otwarte strumienie stdio(3) nie są opróżniane. Z drugiej strony, _exit nie zamyka otwartych deskryptorów plików, co może spowodować nieoczekiwane opóźnienia podczas oczekiwania na zakończenie odłożonych zapisów. Jeśli opóźnienia te są niepożądane, to może być przydatne wywołanie funkcji podobnych do tcflush(3) przed wywołaniem _exit(). To, czy jakiekolwiek odłożone wejścia/wyjścia zostaną anulowane i które z nich mogą zostać anulowane podczas _exit(), zależy od implementacji.
Różnice biblioteki C/jądra¶
Powyższy tekst w OPISIE dotyczy tradycyjnych skutków _exit(), obejmujących zakończenie procesu oraz semantykę określoną przez POSIX.1 i zaimplementowaną przez opakowującą funkcję biblioteczną C. We współczesnych systemach, oznacza to zakończenie wszelkich wątków procesu.
W odróżnieniu od opakowującej funkcji bibliotecznej C, surowe linuksowe wywołanie systemowe _exit() kończy jedynie wywołujący wątek, a działania obejmujące przypisanie nowego rodzica procesom potomnym lub wysłanie SIGCHLD do procesów macierzystych są wykonywane wyłącznie w sytuacji, gdy jest to ostatni wątek z danej grupy wątków.
Do glic 2.3, funkcja opakowująca _exit() przywoływała wywołanie systemowe o tej samej nazwie. Od glibc 2.3, funkcja opakowująca wywołuje exit_group(2), w celu zakończenia wszystkich wątków w procesie.
ZOBACZ TAKŻE¶
execve(2), exit_group(2), fork(2), kill(2), wait(2), wait4(2), waitpid(2), atexit(3), exit(3), on_exit(3), termios(3)
TŁUMACZENIE¶
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Przemek Borys <pborys@dione.ids.pl>, Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl> i Michał Kułach <michal.kulach@gmail.com>
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.
2 maja 2024 r. | Linux man-pages (niewydane) |