複製鏈接
請複製以下鏈接發送給好友

ExitProcess

鎖定
ExitProcess 結束調用的進程及其所有的線程
windows函數,用於多線程編程
外文名
ExitProcess
平    台
windows
頭文件
windows.h
必要頭文件
processthreadsapi.h

ExitProcess語法

DECLSPEC_NORETURN VOID ExitProcess(  UINT uExitCode);

ExitProcess參數

uExitCode
該進程和所有線程的退出代碼。 [1] 

ExitProcess返回值

此函數沒有返回值

ExitProcess注意

使用GetExitCodeProcess函數檢索進程的退出值。使用GetExitCodeThread函數檢索線程的退出值。
退出進程會導致以下情況:
  1. 除調用線程外,進程中的所有線程都會在不接收DLL_THREAD_DETACH通知的情況下終止執行。
  2. 在步驟1中終止的所有線程的狀態變為信號。
  3. 調用所有加載的動態鏈接庫(DLL)的入口點函數。
  4. 在所有附加的DLL都執行了任何進程終止代碼之後,ExitProcess函數終止當前進程,包括調用線程。
  5. 調用線程的狀態變為信號。
  6. 該進程打開的所有對象句柄都將關閉。
  7. 進程的終止狀態從STILL_ACTIVE更改為進程的退出值。
  8. 進程對象的狀態變為信號,滿足任何等待進程終止的線程。
如果進程中的一個終止線程持有鎖並且其中一個加載的DLL中的DLL分離代碼嘗試獲取相同的鎖,則調用ExitProcess會導致死鎖。 相反,如果進程通過調用TerminateProcess終止,則進程附加的DLL不會被通知進程終止。 因此,如果您不知道進程中所有線程的狀態,最好調用TerminateProcess而不是ExitProcess。 請注意,從應用程序的main函數返回會導致對ExitProcess的調用。
在DLL中調用ExitProcess可能會導致意外的應用程序或系統錯誤。 只有當您知道哪些應用程序或系統組件將加載DLL並且在此上下文中調用ExitProcess是安全的時,才確保從DLL調用ExitProcess
退出進程不會導致子進程終止。
退出進程不一定會從操作系統中刪除進程對象。 關閉進程的最後一個句柄時,將刪除進程對象。

ExitProcess使用條件

Windows 版本
WindowsXP
目標平台
Windows
頭文件
processthreadsapi.h Windows.h
Kernel32.lib
DLL
Kernel32.dll
參考資料