_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);

    Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)):

_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-2024.

_Exit()
    C11, POSIX.1-2024.

HISTORIA

_exit()
    4.3BSD, SVr4, POSIX.1-1988.

_Exit()
    C99, POSIX.1-2001.

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
Tłumaczenie niniejszej strony podręcznika: 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 (https://www.gnu.org/licenses/gpl-3.0.html) 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.