table of contents
- bookworm-backports 4.24.0-2~bpo12+1
- unstable 4.25.0-1
_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);
_Exit():
_ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
ОПИСАНИЕ¶
_exit() «безотлагательно» завершает вызывающий процесс. Все открытые дескрипторы файлов, принадлежащие процессу, закрываются. Все его дочерние процессы наследуются init(1) (или ближайшим «собирающим» процессом, определённым вызовом prctl(2) с операцией PR_SET_CHILD_SUBREAPER).Родительскому процессу посылается сигнал SIGCHLD.
Значение status & 0xFF возвращается родительскому процессу как код завершаемого процесса и может быть получено родительским процессом с помощью одного из семейства вызовов wait(2).
Функция _Exit() эквивалентна _exit().
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ¶
Эти функции не выполняют возврат.
СТАНДАРТЫ¶
- _exit()
- POSIX.1-2008.
- _Exit()
- C11, POSIX.1-2008.
ИСТОРИЯ¶
POSIX.1-2001, SVr4, 4.3BSD.
_Exit() была добавлена в стандарт C99.
ПРИМЕЧАНИЯ¶
Обсуждение эффектов при завершении работы, передачу кода выхода, зомби-процессы, сигналы и т. п., смотрите в exit(3).
Функция _exit() подобна exit(3), но не вызывает никаких функций, зарегистрированных с помощью atexit(3) или on_exit(3). Открытые потоки посредством stdio(3) не сбрасываются. С другой стороны, _exit() закрывает открытые дескрипторы файлов, а это может привести к неопределенной задержке, так как происходит ожидание завершения вывода данных. Если задержка нежелательна, то может быть полезным перед вызовом _exit() вызывать функцию типа tcflush(3). Будет ли отмена ожидания ввод-вывода, а также какие именно ожидающие операции ввода-вывода будут завершены при вызове _exit, зависит от реализации.
Отличия между библиотекой C и ядром¶
Текст выше в разделе DESCRIPTION описывает традиционный эффект _exit(), который заключается в завершении процесса, и это семантика, определенная POSIX.1 и реализованная библиотечной оберткой на C. На современных системах это означает завершение всех потоков в процессе.
В отличие от функции-оболочки библиотеки C, системный вызов _exit() в Linux завершает только вызывающий поток, и такие действия, как смена родителя для дочерних процессов или отправка SIGCHLD родительскому процессу, выполняются только если это последний поток в группе потоков.
До glibc 2.3 функция-обертка _exit() вызывала системный вызов ядра с таким же именем. Начиная с glibc 2.3, функция-обертка вызывает exit_group(2), чтобы завершить все нити процесса.
СМОТРИТЕ ТАКЖЕ¶
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 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.
Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков.
2 мая 2024 г. | Справочные страницы Linux 6.9.1 |