-
ExitProcess
鎖定
ExitProcess 結束調用的進程及其所有的線程
windows函數,用於多線程編程
- 外文名
- ExitProcess
- 平 台
- windows
- 頭文件
- windows.h
- 必要頭文件
- processthreadsapi.h
ExitProcess語法
DECLSPEC_NORETURN VOID ExitProcess( UINT uExitCode);
ExitProcess參數
uExitCode
ExitProcess返回值
此函數沒有返回值
ExitProcess注意
使用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。
退出進程不會導致子進程終止。
退出進程不一定會從操作系統中刪除進程對象。 關閉進程的最後一個句柄時,將刪除進程對象。
ExitProcess使用條件
Windows 版本 | WindowsXP |
目標平台 | Windows |
頭文件 | processthreadsapi.h Windows.h |
庫 | Kernel32.lib |
DLL | Kernel32.dll |
- 參考資料
-
- 1. ExitProcess function .Microsoft Docs[引用日期2018-07-06]
- 詞條統計
-
- 瀏覽次數:次
- 編輯次數:7次歷史版本
- 最近更新: 晨光与真彩7