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

ИМЯ
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)