Scroll to navigation

_exit(2) System Calls Manual _exit(2)

ИМЯ

_exit, _Exit - завершает вызывающий процесс

БИБЛИОТЕКА

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

СИНТАКСИС

#include <unistd.h>
[[noreturn]] void _exit(int status);
#include <stdlib.h>
[[noreturn]] void _Exit(int status);

Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

_Exit():


_ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L

ОПИСАНИЕ

_exit() «безотлагательно» завершает вызывающий процесс. Все открытые дескрипторы файлов, принадлежащие процессу, закрываются. Все его дочерние процессы наследуются init(1) (или ближайшим «собирающим» процессом, определённым вызовом prctl(2) с операцией PR_SET_CHILD_SUBREAPER).Родительскому процессу посылается сигнал SIGCHLD.

The value status & 0xFF is returned to the parent process as the process's exit status, and can be collected by the parent using one of the wait(2) family of calls.

Функция _Exit() эквивалентна _exit().

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

Эти функции не выполняют возврат.

СТАНДАРТЫ

POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD. Функция _Exit() была представлена в C99.

ПРИМЕЧАНИЯ

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

Функция _exit() подобна exit(3), но не вызывает никаких функций, зарегистрированных с помощью atexit(3) или on_exit(3). Открытые потоки посредством stdio(3) не сбрасываются. С другой стороны, _exit() закрывает открытые дескрипторы файлов, а это может привести к неопределенной задержке, так как происходит ожидание завершения вывода данных. Если задержка нежелательна, то может быть полезным перед вызовом _exit() вызывать функцию типа tcflush(3). Будет ли отмена ожидания ввод-вывода, а также какие именно ожидающие операции ввода-вывода будут завершены при вызове _exit, зависит от реализации.

Отличия между библиотекой C и ядром

The text above in DESCRIPTION describes the traditional effect of _exit(), which is to terminate a process, and these are the semantics specified by POSIX.1 and implemented by the C library wrapper function. On modern systems, this means termination of all threads in the process.

By contrast with the C library wrapper function, the raw Linux _exit() system call terminates only the calling thread, and actions such as reparenting child processes or sending SIGCHLD to the parent process are performed only if this is the last thread in the thread group.

Up to glibc 2.3, the _exit() wrapper function invoked the kernel system call of the same name. Since glibc 2.3, the wrapper function invokes exit_group(2), in order to terminate all of the threads in a process.

СМОТРИТЕ ТАКЖЕ

execve(2), exit_group(2), fork(2), kill(2), wait(2), wait4(2), waitpid(2), atexit(3), exit(3), on_exit(3), termios(3)

ПЕРЕВОД

Русский перевод этой страницы руководства разработал(и) Yuri Kozlov <yuray@komyakino.ru>

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

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

22 января 2023 г. Справочные страницы Linux 6.03