exitProcess 函数 (processthreadsapi.h)

结束调用进程及其所有线程。

语法

void ExitProcess(
  [in] UINT uExitCode
);

参数

[in] uExitCode

进程和所有线程的退出代码。

返回值

备注

使用 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 不会收到进程终止的通知。 因此,如果不知道进程中所有线程的状态,则调用 TerminateProcessExitProcess 更好。 请注意,从应用程序的 main 函数返回会导致调用 ExitProcess

在 DLL 中调用 ExitProcess 可能会导致意外的应用程序或系统错误。 仅当知道哪些应用程序或系统组件将加载 DLL 并且在此上下文中调用 ExitProcess 是安全的时,才 确保从DLL 调用 ExitProcess

退出进程不会导致子进程终止。

退出进程不一定从操作系统中删除进程对象。 关闭进程的最后一个句柄时,将删除进程对象。

示例

有关示例,请参阅 使用重定向的输入和输出创建子进程

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 processthreadsapi.h (包括 Windows Server 2003、Windows Vista、Windows 7、Windows Server 2008 Windows Server 2008 R2)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

CreateProcess

CreateRemoteThread

CreateThread

ExitThread

GetExitCodeProcess

GetExitCodeThread

OpenProcess

进程和线程函数

进程

TerminateProcess

终止进程