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 不會收到進程終止的通知。 因此,如果您不知道進程中所有線程的狀態,最好呼叫 TerminateProcess 而不是 ExitProcess。 請注意,從應用程式 的主要 函式傳回會導致呼叫 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)
程式庫 Kernel32.lib
DLL Kernel32.dll

另請參閱

CreateProcess

CreateRemoteThread

CreateThread

ExitThread

GetExitCodeProcess

GetExitCodeThread

OpenProcess

處理序和執行緒函式

程序

TerminateProcess

終止進程