_exit()

Прервать выполнение программы

Прототип:

#include <stdlib.h>
void _exit( int status );

Аргументы:

status
Статус завершения процесса для использования в приложении. Значение может быть нулем, EXIT_STATUS, EXIT_FAILURE или другим значением. Следует помнить, что только младшие значащие 8 бит (например, при значении 0377 статуса) могут быть доступны для ожидающего родительского процесса.

Библиотека:

libc

Описание:

Фунция _exit() вызывает нормальное завершение программы.


Note: Функции, зарегистрированные с помощью atexit(), не вызываются при использовании _exit() для завершения программы. Если необходимо их вызывать, используйте exit() вместо _exit().

Функция _exit() выполняет следующее, когда процесс завершается по какой-либо причине:

  1. Закрывает все открытые файловые дескрипторы и потоки для вызывающего процесса.

  2. Уведомляет родительский процесс о завершении текущего, если родительский процесс вызвал wait() или waitpid(). Младшие 8 битов статуса становятся доступны для родительского процесса через wait() или waitpid().

  3. Сохраняет статус выхода, если родительский процесс вызывающего процесса не вызывает wait() или waitpid(). Если родительский процесс вызовет wait() или waitpid() позже, данный статус вернется немедленно. До считывания статуса завершенный процесс переходит в состояние "зомби".

  4. Посылает сигнал SIGHUP дочерним процессам вызывающего процесса; это может неявно завершить дочерние процессы, если они не обрабатывают сигнал SIGHUP. Дочерним процессам завершенного назначается новый родитель.

  5. Посылает сигнал SIGCHLD родительскому процессу.

  6. Посылает сигнал SIGHUP каждому нефоновому процессу в группе, если вызывающий процесс является контролирующим процессом для управляющего терминала соответствующей группы процессов.

  7. Отсоединяет управляющий терминал от сеанса вызывающего процесса, если процесс является контролирующим, позволяя тем самым получить контроль другому процессу.

  8. Если завершение процесса приводит к тому, что группа процессов теряет родителя, и какой-либо процесс из этой группы останавливается, каждому процессу в этой группе отправляется сигнал SIGHUP, а затем - сигнал SIGCONT.

Возвращаемое значение:

Функция _exit() не возвращает значение.

Примеры:

#include <stdio.h>
#include <stdlib.h>
int main( int argc, char *argv[] )
{
FILE *fp;
if ( argc <= 1 )
{
fprintf( stderr, "Missing argument\n" );
exit( EXIT_FAILURE );
}
fp = fopen( argv[1], "r" );
if ( fp == NULL )
{
fprintf( stderr, "Unable to open '%s'\n", argv[1] );
_exit( EXIT_FAILURE );
}
fclose( fp );
/*
* At this point, calling _exit() is the same as calling
* return EXIT_SUCCESS;...
*/
_exit( EXIT_SUCCESS );
}

Классификация:

POSIX 1003.1

Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

abort(), atexit(), close(), execl(), execle(), execlp(), execlpe(), execv(), execve(), execvp(), execvpe(), exit(), getenv(), main(), putenv(), sigaction(), signal(), spawn(), spawnl(), spawnle(), spawnlp(), spawnlpe(), spawnp(), spawnv(), spawnve(), spawnvp(), spawnvpe(), system(), wait(), waitpid()




Предыдущий раздел: Описание API системной библиотеки