Provided by: manpages-ru-dev_4.21.0-2_all bug

ИМЯ

       exit - вызывает нормальное завершение процесса

LIBRARY

       Standard C library (libc, -lc)

СИНТАКСИС

       #include <stdlib.h>

       [[noreturn]] void exit(int status);

ОПИСАНИЕ

       The  exit()   function  causes normal process termination and the least significant byte of status (i.e.,
       status & 0xFF) is returned to the parent (see wait(2)).

       Вызываются все функции, зарегистрированные с помощью atexit(3) и on_exit(3), в обратном  по  отношению  к
       регистрации  порядке  (в  этих  функциях  возможно  использовать atexit(3) или on_exit(3) для регистрации
       дополнительной функции, которая будет также вызвана при выходе; при этом она добавляется в начало  списка
       функций,  которые  осталось  вызвать).  Если  из  одной  из  функций не происходит возврат (например, она
       вызывает _exit(2) или завершает себя по сигналу), то  оставшиеся  функции  не  вызываются,  и  дальнейший
       процесс  выхода  прекращается  (в  частности,  запись  потоков stdio(3)). Если функция зарегистрирована с
       помощью atexit(3) или on_exit(3) несколько раз, то она вызывается столько раз, сколько зарегистрирована.

       Все открытые потоки stdio(3) записываются и закрываются. Файлы, созданные tmpfile(3), удаляются.

       В стандарте Си определены две константы, EXIT_SUCCESS и EXIT_FAILURE, которые можно передавать exit() для
       указания корректности или некорректности завершения, соответственно.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

       Функция exit() не возвращает выполнение.

АТРИБУТЫ

       Описание терминов данного раздела смотрите в attributes(7).
       ┌──────────────────────────────────────────────────────────┬──────────────────────┬─────────────────────┐
       │ ИнтерфейсАтрибутЗначение            │
       ├──────────────────────────────────────────────────────────┼──────────────────────┼─────────────────────┤
       │ exit()                                                   │ Безвредность в нитях │ MT-Unsafe race:exit │
       └──────────────────────────────────────────────────────────┴──────────────────────┴─────────────────────┘

       Функция exit() использует глобальную незащищённую  переменную,  поэтому  функцию  нельзя  использовать  в
       нескольких нитях одновременно.

СТАНДАРТЫ

       POSIX.1-2001, POSIX.1-2008, C99, SVr4, 4.3BSD.

ЗАМЕЧАНИЯ

       Поведение  не  определено,  если  одна  из  функций, зарегистрированных с помощью atexit(3) и on_exit(3),
       вызовет exit() или longjmp(3). Заметим, что вызов execve(2)  удаляет  регистрацию  функций,  сделанную  с
       помощью atexit(3) и on_exit(3).

       Использование  EXIT_SUCCESS  и EXIT_FAILURE является более переносимым методом (в не-UNIX окружения), чем
       указание 0 и какого-то ненулевого значения (например, 1 или -1). В частности, в VMS  используется  другое
       соглашение.

       В BSD пытались стандартизовать коды завершения (которые также были взяты и другие библиотеки Си, например
       GNU C); смотрите файл <sysexits.h>.

       После exit() код выхода должен быть передан родительскому процессу. Есть три варианта:

       •  Если   родитель   установил  обработчик  SA_NOCLDWAIT  или  SIGCHLD  равным  SIG_IGN,  то  код  выхода
          отбрасывается и потомок завершается сразу.

       •  Если родитель ожидает завершения потомка, то он получает код выхода и потомок сразу завершается.

       •  Иначе потомок становится процессом «зомби»: большинство ресурсов процесс  задействуется  вторично,  но
          слот  с минимумом информации о процессе-потомке (код завершения, статистика по использованию ресурсов)
          остаётся в таблице процессов.  Это  позволяет  родителю  в  дальнейшем  использовать  waitpid(2)  (или
          подобный) для получения кода завершения потомка; после этого слот под процесс-зомби освобождается.

       Если  в реализации поддерживается сигнал SIGCHLD, то он посылается родителю. Если родитель установил флаг
       SA_NOCLDWAIT, то поведение при сигнале SIGCHLD не определено.

   Сигналы, посылаемые другим процессам
       Если существующий процесс является лидером сеанса и управляющим терминала сеанса, то каждому процессу  из
       группы  фонового  режима этого управляющего терминала посылается сигнал SIGHUP, и терминал отключается от
       сеанса, чтобы его можно было захватить новому управляющему процессу.

       Если завершение процесса приводит к осиротению группы процессов, и если любой член только что осиротевшей
       группы останавливается, то каждому процессу этой группы после сигнала SIGHUP будет послан сигнал SIGCONT.
       Описание процесса осиротения группы смотрите в setpgid(2).

       За исключением описанные выше случаев, когда процессы,  куда  посылается  сигнал,  могут  быть  потомками
       завершающегося  процесса,  завершение  процесса,  обычно,  не  приводит к отправке сигнала потомкам этого
       процесса. Однако, процесс может вызвать prctl(2) с  операцией  PR_SET_PDEATHSIG,  чтобы  подготовиться  к
       получению сигнала, если его родитель завершает работу.

СМ. ТАКЖЕ

       _exit(2), get_robust_list(2), setpgid(2), wait(2), atexit(3), on_exit(3), tmpfile(3)

ПЕРЕВОД

       Русский  перевод  этой  страницы руководства был сделан Azamat Hackimov <azamat.hackimov@gmail.com>, Yuri
       Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

       Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3
       или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное  письмо
       на man-pages-ru-talks@lists.sourceforge.net.

Linux man-pages 6.03                            5 февраля 2023 г.                                        exit(3)