实验:查看进程树
很多工具都不能显示进程的父ID,但是通过性能监视器或者tlist可以看到.下面是 tlist /t的输出
上面的输出通过缩进来表达父子关系。父进程已经消失的进程没有缩进,以左对齐方式显示。
注意:windows只维护了父进程的信息,没有维护父进程的父进程,所以不能有效的判定出爷孙关系,只能简单的让没有父进程的左对齐。
下面,我们来做一个实验,验证一下windows只保存了父进程的ID。
1 打开一个命令行窗口
2 输入 title parent,修改命令行窗口名称为parent
3 输入 start cmd,打开另外一个命令行窗口
4 在新打开的命令行窗口中输入 title child
5 打开任务管理器
6 在child窗口中输入 mspaint
7 在child 窗口中输入exit
8 回到任务管理器
9 点击应用程序标签页
10 右键点击parent,在弹出菜单中选择转到进程
11 右键点击 cmd.exe,在弹出菜单中选择结束进程树并确认
可以看到,parent窗口消失,但是mspaint窗口依然存在。这充分说明了windows并没有维护一个完整的进程树关系。
有很多工具可以查看和修改进程信息,主要来自于 windows调试工具,SDK 和sysinternals.这些工具的功能存在着重合,并且对于同样的信息,名称也可能不一样。
使用最广的首推任务管理器(这个名字感觉怪怪的,因为内核中并没有“任务”这个东西)。
利用任务管理器查看进程信息
Windowsn内建的任务管理器,提供了便捷的查看系统进程的途径。有4种方法可以启动任务管理器
l Ctrl+shift+esc
l 右键单击任务栏,弹出菜单中选择启动任务管理器
l 按下ctrl+alt+delete,然后选择启动任务管理器
l 启动taskmgr.exe
启动任务管理器之后,点击 进程 选项卡可以看到进程列表,注意:这里显示的是硬盘上的文件名称。和windows的其他对象不同,进程没有全局名称。
很明显,进程选项卡显示了进程列表,但是应用程序选项卡的显示标准却很容容易发现。其实,这里显示的是当前窗口站上的所有桌面的顶层窗口列表。通常情况下,只有一个交互桌面,程序可以通过调用CreateDesktip来创建更多桌面,sysinteranl的 Desktop工具,就是这么做的。
状态列表明了窗口对应的现成是否处于等待状态。正在运行表明现成在等待输入,没有响应表明现成不是在等待输入,可能在正在运行,或者等待同步对象。
介绍完毕进程管理器,我们来看一下process explorer,这是 sysinternals提供的一个工具,是目前最好用的获取进程信息的工具,提供了比其他任何工具都要强大的功能,本书中的大部分实验都依赖这个工具来完成。