Поделиться через


Функция ExitProcess (processthreadsapi.h)

Завершает вызывающий процесс и все его потоки.

Синтаксис

void ExitProcess(
  [in] UINT uExitCode
);

Параметры

[in] uExitCode

Код выхода для процесса и всех потоков.

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

None

Remarks

Используйте функцию GetExitCodeProcess , чтобы получить значение выхода процесса. Используйте функцию GetExitCodeThread , чтобы получить значение выхода потока.

Выход из процесса приводит к следующим причинам:

  1. Все потоки в процессе, за исключением вызывающего потока, завершают выполнение без получения уведомления DLL_THREAD_DETACH.
  2. Состояния всех потоков, завершенных на шаге 1, становятся сигнальными.
  3. Функции точки входа всех загруженных библиотек динамической компоновки (DLL) вызываются с помощью DLL_PROCESS_DETACH.
  4. После выполнения всех присоединенных библиотек DLL любого кода завершения процесса функция ExitProcess завершает текущий процесс, включая вызывающий поток.
  5. Состояние вызывающего потока становится сигнальным.
  6. Все дескрипторы объектов, открытые процессом, закрываются.
  7. Состояние завершения процесса меняется с STILL_ACTIVE на значение выхода процесса.
  8. Состояние объекта процесса становится сигнальным, удовлетворяющим всем потокам, ожидающим завершения процесса.
Если один из завершенных потоков в процессе содержит блокировку, а код отсоединения DLL в одном из загруженных библиотек DLL пытается получить такую же блокировку, вызов ExitProcess приводит к взаимоблокировке. В отличие от этого, если процесс завершается вызовом TerminateProcess, библиотеки DLL, к которым присоединен процесс, не получают уведомления о завершении процесса. Поэтому, если вы не знаете состояние всех потоков в процессе, лучше вызвать TerminateProcess , чем ExitProcess. Обратите внимание, что возврат из функции main приложения приводит к вызову ExitProcess.

Вызов ExitProcess в библиотеке DLL может привести к непредвиденным ошибкам приложения или системы. Не забудьте вызвать ExitProcess из библиотеки DLL только в том случае, если вы знаете, какие приложения или системные компоненты будут загружать библиотеку DLL и что в этом контексте можно безопасно вызывать ExitProcess .

Выход из процесса не приводит к завершению дочерних процессов.

Выход из процесса не обязательно удаляет объект процесса из операционной системы. Объект процесса удаляется при закрытии последнего дескриптора процесса.

Примеры

Пример см. в разделе Создание дочернего процесса с перенаправленными входными и выходными данными.

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header processthreadsapi.h (включая Windows.h в Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)
Библиотека Kernel32.lib
DLL Kernel32.dll

См. также

CreateProcess

CreateRemoteThread

CreateThread

ExitThread

GetExitCodeProcess

GetExitCodeThread

OpenProcess

Функции процессов и потоков

Процессы

TerminateProcess

Завершение процесса