Windows Internals 筆記——終止進程

來源:互聯網
上載者:User

標籤:body   div   ++   intern   設定   AC   其他   min   檔案   

1.進程可以通過以下四種方式終止:

  • 主線程的進入點函數返回(強烈推薦的方式)
  • 進程中的一個線程調用ExitProcess函數(避免這種方式)
  • 另一個進程中的線程調用TerminateProcess函數(避免這種方式)
  • 進程中的所有線程都“自然死亡”(這種情況幾乎從來都不會發生)

 

2.應該保證只有在主線程的進入點函數返回之後,這個應用程式的進程才終止,只有這樣才能保證主線程的所有資源都被正確清理。讓主線程的進入點函數返回,可以保證以下操作會被執行:

  • 該線程建立的任何C++對象都將由這些對象的解構函式正確銷毀。
  • 作業系統將正確釋放線程棧使用的記憶體。
  • 系統將線程的結束代碼(在進程核心對象中維護)設為進入點函數的傳回值。
  • 系統遞減進程核心對象的使用計數。

 

3.ExitProcess函數將終止進程,並設定結束代碼,沒有傳回值,而且之後的代碼永遠不會被執行(對象的解構函式也無法被調用)。

 

4.當主線程的進入點函數(WinMain,main)返回時,會返回到C/C++運行庫的啟動代碼,後者將正確清理進程使用的全部C運行時資源。釋放了C運行時資源之後,C運行時啟動代碼將顯示調用ExitProcess,並將進入點函數返回的值傳給它。這便解釋了為什麼只需從主線程的進入點函數返回,就會終止整個進程。注意,進程中啟動並執行其他任何線程都會隨進程一起終止。

 

5.從作業系統的角度出發,一個進程在其所有線程都終止之後才會終止時正確的。但是C/C++運行庫的策略是:不管進程中是否還有其他線程在運行,只要主線程從它的進入點函數返回,C/C++庫就會調用ExitProcess來終止進程。但是如果進入點函數中調用的是ExitThread而不是ExitProcess或進入點函數直接返回,應用程式的主線程將停止執行,但只要進程中還有其他線程在運行,進程就不會終止。

 

6.任何線程都可以調用TerminateProcess來終止另一個進程或者它自己的進程。只有在無法通過其他方法來強制進程退出時才用。而且被終止的進程得不到自己要被終止的通知,也不能阻止自己被強行終止。

 

7.一旦進程終止,不管是如何終止的,系統會保證不留它的任何部分。絕對沒有任何辦法知道哪個進程是否運行過。進程在終止後絕對不會泄漏任何東西(記憶體會釋放,檔案會被關閉,核心對象計數會遞減)。

 

8.TerminateProcess函數是非同步,函數返回時系統並不能保證進程已經被強行終止了。

 

9.如果一個進程中的所有線程都終止了(它們都調用了ExitThread或TerminateThread來終止了),作業系統就認為沒有任何理由再保持進程的地址空間,就會終止這個進程,進程的結束代碼會被設為最後一個終止的那個線程的結束代碼。

 

10.一個進程終止時,系統會依次執行以下操作:

  • 終止進程中遺留的任何線程
  • 釋放進程分配的所有使用者物件和GDI對象,關閉所有核心對象(除非其他進程也開啟了)
  • 進程的結束代碼從STILL_ACTIVE變為傳遞給ExitProcess或TerminateProcess函數的代碼。
  • 進程核心對象的狀態變成已觸發狀態,這就是為什麼系統中的其他線程可以掛起它們自己,直至另一個進程終止運行。
  • 進程核心對象的使用計數遞減1。

 

Windows Internals 筆記——終止進程

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.