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窗口就不会随之结束了。