如果我有一個手柄,它已經停止(殺死或剛剛結束)一些窗口過程:流程結束後會發生什麼?
- 將手柄(或更好它後面的內存)被重新用於另一個進程?
- 或者將GetExitCodeProcess()從現在起永遠得到正確的結果嗎?
如果1.是真的:GetExitCodeProcess()如何工作?
如果2.是真的:這不是說我可以通過啓動/終止新進程來降低操作系統,因爲我創建了越來越多的句柄(並且操作系統爲它們保留了內存)?
我對手柄的概念有點困惑。
預先感謝您!
如果我有一個手柄,它已經停止(殺死或剛剛結束)一些窗口過程:流程結束後會發生什麼?
如果1.是真的:GetExitCodeProcess()如何工作?
如果2.是真的:這不是說我可以通過啓動/終止新進程來降低操作系統,因爲我創建了越來越多的句柄(並且操作系統爲它們保留了內存)?
我對手柄的概念有點困惑。
預先感謝您!
句柄間接指向內核對象。只要有開放的手柄,對象就會保持活着。
將句柄(或更好的背後的內存)重新用於另一個進程?
句柄的數值(或者它被實現)可能被重用,但這並不意味着它總是指向相同的東西。就像進程ID一樣。
或者將例如GetExitCodeProcess()從現在開始永遠得到正確的結果?
否。當進程的所有句柄都關閉時,進程對象被釋放(連同其退出代碼)。請注意,正在運行的進程擁有一個隱式句柄。只要你需要,你可以拿着一個開放的手柄。
如果2是真的:那不是意味着我可以打倒OS與啓動/殺死新工藝,因爲我創造更多的句柄(和OS儲備存儲他們的)?
有很多方法可以使系統捱餓。它會開始大量交換,或者在某個時候不能產生新的進程。
謝謝。澄清:如果我調用CreateProcess(),它返回PROCESS_INFORMATION結構中的句柄,GetExitCodeProcess()將工作,直到我關閉此(和任何其他)句柄? – beutelfuchs
@ beuteluchs:是的,只要該進程至少有一個打開的句柄,查詢就可以工作。 –
謝謝,幫了我很多。在MSDN上感覺有點失落。 – beutelfuchs
簡短的回答:
GetExitCodeProcess
作品,直到你打電話CloseHandle
,什麼工藝對象將被釋放,並可以重複使用之後。
長答案: 請參閱Cat Plus Plus的答案。
也謝謝! – beutelfuchs
非常有趣。我敢打賭,GetExitCodeProcess將工作,直到父(呼叫)過程退出。目前沒有時間進行測試:) – 9dan