Книга: Разработка приложений в среде Linux. Второе издание

10.4.5. Уничтожение процессом самого себя

10.4.5. Уничтожение процессом самого себя

Процессы прерывают себя вызовом либо exit(), либо _exit(). Когда функция процесса main() возвращает управление, стандартная библиотека С вызывает exit() со значением, возвращаемым main() в качестве параметра.

void exit(int exitCode);
void _exit(int exitCode);

Две формы, exit() и _exit(), отличаются тем, что exit() — функция из библиотеки С, a _exit() — системный вызов. Системный вызов _exit() прерывает программу немедленно, и exitCode сохраняется в качестве кода возврата процесса. Когда используется exit(), то перед тем, как запустить системный вызов _exit(exitCode), вызываются функции, зарегистрированные в atexit(). Помимо всего прочего, это позволяет стандартной библиотеке ввода-вывода ANSI/ISO сбросить все свои буферы.

Регистрация функций, которые должны быть запущены при вызове exit(), выполняется с помощью функции atexit():

int atexit(void (*function) (void));

Единственный параметр, переданный atexit() — это указатель на функцию. Когда вызывается exit(), все функции, зарегистрированные через atexit(), вызываются в порядке, обратном тому, в котором они регистрировались. Следует отметить, что если используется _exit() либо процесс прерывается сигналом (подробно о сигналах читайте в главе 12), то функции, зарегистрированные atexit(), не вызываются.

Оглавление книги


Генерация: 1.166. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз