2014-10-10 28 views
10

我有這個小測試程序,可以跟蹤PID的創建和關閉。 我正在調查我的步進已經發現的問題,並想問你關於這個 以便更好地瞭解正在發生的事情。Windows 7是否回收進程標識(PID)編號?

當Windows過程開始時,它得到一個PID但是,當進程關閉,請問PID 成爲退休(像一個明星籃球運動員的球衣號碼)或有可能是一個新的,完全 無關,過程將在該公佈的PID下創建?

謝謝

+0

是的,它的確如此。所以你必須對流程保持一定的把握,以確保它仍然活着 - 只要是這樣,ID就會保持不變。 – Luaan 2014-10-10 14:25:20

回答

14

是的,進程ID可以被系統回收。只要過程的最後一個句柄已關閉,它們就可以用於此目的。

雷蒙德陳在這裏討論這個問題:When does a process ID become available for reuse?

進程ID是與過程對象相關聯的價值,併爲 只要過程對象仍然存在,所以也將其進程 ID。只要進程仍在運行,進程對象就會一直保留 (進程隱式保留對自身的引用),或者只要有人仍然擁有進程對象的句柄。

如果你仔細想想,這是有道理的,因爲只要有 仍然是一個句柄的過程中,有人可以調用WaitForSingleObject 等待進程退出,或者他們可以調用GetExitCodeProcess 檢索退出代碼,並且退出代碼必須存儲在某個地方供以後檢索。

當所有的手柄閉合,然後內核知道,沒有人是 要問的過程中是否仍在運行或什麼的退出 代碼是(因爲你需要一個手柄來問這些問題)。 指向哪個進程對象可以被銷燬,進而破壞進程標識 。

+0

因此,這意味着應該將流程標識符稱爲運行流程標識符,而不是標識單個流程。 – 2017-09-22 09:50:52

7

我跑了大約一個小時的測試,在那段時間302個進程退出,其中70個具有共同的PID(相同的PID用於新進程)。這就是說他們經常被重複使用。

相關問題