ABORT(3) | Руководство программиста Linux | ABORT(3) |
abort - аварийно завершает процесс
#include <stdlib.h>
void abort(void);
Сначала функция abort() разблокирует сигнал SIGABRT, а затем генерирует этот сигнал для вызывающего процесса (как если бы была вызвана raise(3)). Это приводит к аварийному завершению процесса, если сигнал SIGABRT не обрабатывается и обработчик сигнала не возвращает управление (смотрите longjmp(3)).
Если сигнал SIGABRT игнорируется или обрабатывается обработчиком, который возвращает управление, то функция abort() всё равно завершит процесс. Она восстанавливает обработчик SIGABRT по умолчанию, а затем генерирует сигнал повторно.
Функция abort() никогда не возвращает управление.
Описание терминов данного раздела смотрите в attributes(7).
Интерфейс | Атрибут | Значение |
abort() | Безвредность в нитях | MT-Safe |
Вплоть до glibc 2.26, если функция abort() вызывала завершение процесса, то все открытые потоки закрывались и сбрасывались на диск (как при fclose(3)). Однако, в некоторых случаях это могло приводить к взаимным блокировкам и повреждению данных. Поэтому, начиная с glibc 2.27, abort() завершает процесс не сбрасывая потоки на диск. В POSIX.1 разрешено и такое поведение, там указано, что abort() «может выполнить попытку отработать как fclose() на все открытые потоки».
SVr4, POSIX.1-2001, POSIX.1-2008, 4.3BSD, C89, C99.
gdb(1), sigaction(2), assert(3), exit(3), longjmp(3), raise(3)
2017-11-26 | GNU |