看看我們的進程強制結束

來源:互聯網
上載者:User

我們通常的進程是通過退出主線程來完成, 這裡的退出不是指用TerminateThread方法去退出. 而是線程碰到return返回或著執行完整個線程體. 多個線程的程式, 則主線程退出的時候一一去等待其他的線程退出, 然後再退出本身. 怎麼樣正常的退出進程不是我們要在這裡討論的問題, 有興趣的話可以參看win32多線程程式設計.

 

在討論下面話題之前需要指出的一點. 不要在萬不得已的情況下使用強制退出進程.

 

這裡我們重點討論怎麼非正常的退出進程. 先說一下在什麼情況下你可能會考慮到這種方式.

你可能去客戶現場進行UAT之前的測試, 但是發現系統中某個進程在退出時需要花很長的時間, 如超過1分鐘以上. 當然這個問題你之前沒有發現, 因為這個問題只有在你的客戶那裡出現, 在公司的開發機和測試機上退出很快. 因為馬上就要進行UAT了沒有多少時間了.這種情況下你就可能會考慮到強制退出,暫時去解決這個問題, 等UAT順利完成後, 你在慢慢的去解決這個問題.

 

那麼你幾種選擇呢?

exit, TerminateProcess, ExitProcess?

 

在我們使用這些函數之前, 先看看它們都有什麼特點.

exit, 這個函數時c執行階段程式庫的函數, 其實除了這個函數外, c執行階段程式庫還提供了其他類似的_exit, _cexit, _c_exit. exit這個函數在退出進程前它自動做一些清理工作, 包括檔案的Flush, 關閉檔案控制代碼. _exit則是立即退出, 不會做清理工作.

TerminateProcess, ExitProcess: 這個2個方法都是windows執行階段程式庫提供的函數, 前者只會去關閉一些對象的控制代碼然後就退出進程, 而後者則會關閉控制代碼和通知所有載入進來的DLL.

 

這樣的話我們可以選擇順序可以ExitProcess->exit->TerminateProcess->_exit.

 

其實上述情境時我在客戶現場碰到過, 當時我先選的exit,發現在退出的時候彈出記憶體不可讀錯誤. 其實這就時在釋放資源出錯. 後來我就用TerminateProcess, 就沒有問題了.

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.