Проще говоря, exit
- это высокоуровневая функция, которую вы должны вызывать для выхода из процесса, она вызывает обработчики при выходе и некоторые другие высокоуровневые операции очистки._exit
- это функция очистки низкого уровня, она вызывается как последний шаг из exit
.exit
действительно завершит процесс (сделав системный вызов exit ).
Из руководства glibc по адресу http://www.gnu.org/software/libc/manual/html_mono/libc.html (также ознакомьтесь с исходным кодом glibc для получения подробной информации.):
25.6.1 Нормальное завершение
Процесс нормально завершается, когда его программа сигнализирует об этом, вызывая exit.Возвращение из main эквивалентно вызову exit, и значение, которое возвращает main, используется в качестве аргумента для выхода.
- Функция: void exit (int status)
Функция выхода сообщает системечто программа завершена, что приводит к ее завершению.
status - это состояние завершения программы, которое становится частью статуса завершения процесса.Эта функция не возвращает.
Обычное завершение вызывает следующие действия:
Функции, которые были зарегистрированы с помощью функций atexit или on_exit, вызываются в обратном порядке их регистрации.Этот механизм позволяет вашему приложению указывать свои собственные действия по «очистке», которые будут выполняться при завершении программы.Обычно это используется для сохранения информации о состоянии программы в файле или разблокировки блокировок в общих базах данных.
Все открытые потоки закрываются, записывая любые буферизованные выходные данные.Смотрите Закрытие потоков.Кроме того, удаляются временные файлы, открытые с помощью функции tmpfile;см. Временные файлы.
_exit вызывается, завершая программу.См. Внутренние элементы завершения.
И в разделе «Внутренние элементы завершения»:
25.6.5 Внутренние элементы завершения
Функция _exit является примитивом, используемым для процесса.прекращение при выходе.Он объявлен в заголовочном файле unistd.h.
- Функция: void _exit (int status)
Функция _exit является примитивом для завершения процесса с состоянием статуса.Вызов этой функции не выполняет функции очистки, зарегистрированные с помощью atexit или on_exit.