ExitProcess 結束調用的進程及其所有的執行緒
windows函式,用於多執行緒編程
基本介紹
- 外文名:ExitProcess
- 平台:windows
- 頭檔案:windows.h
- 必要頭檔案:processthreadsapi.h
語法,參數,返回值,注意,使用條件,
語法
DECLSPEC_NORETURN VOID ExitProcess( UINT uExitCode);
參數
uExitCode
該進程和所有執行緒的退出代碼。
返回值
此函式沒有返回值
注意
使用GetExitCodeProcess函式檢索進程的退出值。使用GetExitCodeThread函式檢索執行緒的退出值。
退出進程會導致以下情況:
- 除調用執行緒外,進程中的所有執行緒都會在不接收DLL_THREAD_DETACH通知的情況下終止執行。
- 在步驟1中終止的所有執行緒的狀態變為信號。
- 調用所有載入的動態程式庫(DLL)的入口點函式。
- 在所有附加的DLL都執行了任何進程終止代碼之後,ExitProcess函式終止當前進程,包括調用執行緒。
- 調用執行緒的狀態變為信號。
- 該進程打開的所有對象句柄都將關閉。
- 進程的終止狀態從STILL_ACTIVE更改為進程的退出值。
- 進程對象的狀態變為信號,滿足任何等待進程終止的執行緒。
如果進程中的一個終止執行緒持有鎖並且其中一個載入的DLL中的DLL分離代碼嘗試獲取相同的鎖,則調用ExitProcess會導致死鎖。 相反,如果進程通過調用TerminateProcess終止,則進程附加的DLL不會被通知進程終止。 因此,如果您不知道進程中所有執行緒的狀態,最好調用TerminateProcess而不是ExitProcess。 請注意,從應用程式的main函式返回會導致對ExitProcess的調用。
在DLL中調用ExitProcess可能會導致意外的應用程式或系統錯誤。 只有當您知道哪些應用程式或系統組件將載入DLL並且在此上下文中調用ExitProcess是安全的時,才確保從DLL調用ExitProcess。
退出進程不會導致子進程終止。
退出進程不一定會從作業系統中刪除進程對象。 關閉進程的最後一個句柄時,將刪除進程對象。
使用條件
Windows 版本 | WindowsXP |
目標平台 | Windows |
頭檔案 | processthreadsapi.h Windows.h |
庫 | Kernel32.lib |
DLL | Kernel32.dll |