Windows進程父子關係小實驗

Windows中進程A創建了另一個進程B,那麼進程A就是進程B的父進程,B就是A的子進程。

 

在每一個進程的內存數據結構中,只保存了其父進程的PidParent ProcessId),即使父進程被關閉了,這個存儲父進程Pid的字段也不會更新,因此很多情況下通過父進程Pid很可能找不到任何一個進程(即父進程已經關閉或者異常退出)。

當然這並不是什麼大問題,因爲目前並沒有什麼東西需要依賴這個父進程Pid

 

通過一個簡單實驗來說明進程樹還有進程之間的關係,我們需要用到ProcessExplorer這個工具(網上隨便可以下載到)。

首先開一個cmd窗口,使用title Parent修改一下cmdWindow Title,然後使用startcmd開一個子cmd窗口:


 

使用title Child修改子窗口的Title,然後使用start cmd再開一個子窗口:


 

爲新的子窗口修改Title


 

ProcessExplorer中查看窗口的層級關係:


 

我們嘗試以“結束進程樹”的方式來結束Pid852100的父進程:


 

結束後,可以發現,三個cmd窗口都關閉掉了。

 

我們再做一個實驗,仍然是開3cmdParent=>Child=>GrandChild),創建好之後,我們把Child這個cmd先關閉掉,然後我們查看ProcessExplorer

關閉前:


 

關閉後:


 

可以看到,關閉後,GrandChild這個窗口變成了一個獨立的進程,相當於這個進程樹被打斷了,這時我們再去對Parent窗口結束進程樹的話,GrandChild窗口就不會隨之結束了。

發佈了264 篇原創文章 · 獲贊 1萬+ · 訪問量 61萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章