Man page - exit(3)

Packages contains this manual

Available languages:

en fr it pl ja ru ro zh_TW zh_CN de

Manual

exit

НАИМЕНОВАНИЕ
БИБЛИОТЕКА
ОБЗОР
ОПИСАНИЕ
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
АТРИБУТЫ
СТАНДАРТЫ
ИСТОРИЯ
ПРИМЕЧАНИЯ
Сигналы, посылаемые другим процессам
СМОТРИТЕ ТАКЖЕ
ПЕРЕВОД

НАИМЕНОВАНИЕ

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

БИБЛИОТЕКА

Стандартная библиотека языка C ( libc , -lc )

ОБЗОР

#include <stdlib.h>

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

ОПИСАНИЕ

Функция exit () вызывает нормальное завершение процесса, и младший значащий байт status (то есть, status & 0xFF ) возвращается родительскому процессу (см. 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).

Image grohtml-614625-1.png

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

СТАНДАРТЫ

C11, POSIX.1-2008.

ИСТОРИЯ

C89, POSIX.1-2001, 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> и Kirill Rekhov <krekhov.dev@gmail.com>

Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков .