Книга: Разработка приложений в среде 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()
, не вызываются.
- 10.4.6. Уничтожение других процессов
- Вкладывайте в себя деньги
- Проверьте себя
- Почему и как я уволил себя
- Я левша, как мне настроить для себя мышь?
- Я слышал, что через сеть на компьютер проникают вирусы. Как обезопасить себя?
- Управление процессом снизу
- Управление процессом групповой работы и обсуждения
- Надежное уничтожение данных
- Ссылка на себя
- Основы управления процессом
- Структуры данных, связанные с процессом