Provided by: manpages-ru-dev_4.18.1-1_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 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

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