运维知识
悠悠
2025年9月27日

这个神器让我找Bug如有神助!Process Monitor让Windows问题无处遁形

昨天写了一篇关于linux排查进程的方法,有粉丝盆友想要了解windows的,今天我们就来盘盘Process Monitor这个工具。

image-20250927201651846

什么是Process Monitor

Process Monitor,我们一般叫它Procmon,是微软Sysinternals套件里的一个实时监控工具。它能监控文件系统、注册表、进程和线程的活动。听起来很高大上,其实就是一个"偷窥狂",专门偷看程序在系统里都干了些什么。

这工具最牛的地方在于,它是微软官方出品的,完全免费,而且不需要安装,下载下来直接就能用。我记得第一次用的时候,看到那密密麻麻的日志刷屏,心想这玩意儿能有啥用?结果后来发现,这简直就是排查问题的利器。

下载和基本使用

下载地址:https://learn.microsoft.com/en-us/sysinternals/downloads/procmon

image-20250927193514490

去微软官网搜索Sysinternals,或者直接搜Process Monitor就能找到下载链接。下载完是个压缩包,解压后有个Procmon.exe,双击就能运行。

第一次打开会弹出一个许可协议,点同意就行。然后你会看到一个界面,上面有一堆按钮,下面是一个表格,表格里会疯狂地刷新各种信息。

刚开始看到这些信息可能会觉得眼花缭乱,别慌,这很正常。Windows系统每时每刻都有成千上万的操作在进行,文件读写、注册表访问、网络连接等等,Procmon把这些都记录下来了。

界面上方有几个重要的按钮:

  • Time of Day:事件发生的事件。
  • Process Name:触发该事件的进程名。鼠标悬停在进程名上可以显示进程路径。
  • PID:进程ID。
  • Operation:事件的操作类型。
  • Path:事件操作的文件的路径,非进程路径。
  • Result:事件操作结果。
  • Detail:事件操作的额外信息(没啥用)

image-20250927194010787

过滤器的使用技巧

说实话,不用过滤器的话,Procmon基本没法用。信息太多了,就像在瀑布里找一滴特定的水珠一样。

点击过滤器按钮,会弹出一个对话框。这里可以设置各种过滤条件:

按进程名过滤
比如我想监控notepad.exe这个程序,就在Process Name里输入notepad.exe,选择"is",然后点Add。这样就只显示记事本相关的操作了。

image-20250927194810989

image-20250927194842777

按操作类型过滤
如果只想看文件操作,可以在Operation里选择包含"File"的操作。想看注册表操作就选择包含"Reg"的。

image-20250927194912872

按路径过滤
这个特别有用。比如我怀疑某个程序在C:\temp目录下搞鬼,就可以设置Path contains C:\temp。

高级功能探索

调整显示的列名

image-20250927195340755

image-20250927195403414

Application Details 应用程序数据

  • Process Name:生成事件的进程名
  • Image Path:进程的位置(镜像路径)
  • Command Line:启动进程的命令参数
  • Company Name:进程程序文件的注册公司名称
  • Description:进程程序文件的描述
  • Version:进程程序文件的产品版本号
  • Architecture:进程程序文件的架构(32位或64位)

Event Details 事件数据

  • Sequence Number:序号,标明该事件在所有事件中的相对位置(0,1,2,3,...)
  • Event Class:事件类别(Network、Process 等)
  • Operation:事件的操作类型(CloseFile、CreateFile等)
  • Date & Time:事件的操作日期
  • Time of Day:事件的操作事件
  • Category:事件的操作种类(Write、Read Metadata等)
  • Path:事件操作的资源的路径(非进程路径)
  • Detail:事件操作的附加信息
  • Result:事件操作的结果
  • Relative Time:事件操作的发生时间,Process Monitor启动后开始计算。
  • Duration:事件操作的执行时间。
  • Completion Time:事件操作的结束时间。

Process Management 进程管理

  • User Name:执行进程的用户名
  • Session ID:进程的Windows会话ID
  • Authentication ID:进程的登录会话ID
  • Integrity:进程操作的可信级别
  • Process ID:进程ID
  • Thread ID:线程ID
  • Parent PID:父进程ID
  • Virtualized:进程的虚拟化状态

进程树视图
在Tools菜单里有个Process Tree选项,点开后能看到所有进程的父子关系。这对于分析进程启动顺序和依赖关系特别有用。

image-20250927195104713

堆栈跟踪
双击任意一条记录,在弹出的详情窗口里有个Stack标签,显示了调用堆栈信息。虽然大部分时候我们用不到,但对于深度分析问题很有帮助。

image-20250927195136801

导出和保存
Procmon可以把监控结果保存成PML格式的文件,也可以导出为CSV格式。这样就能把数据分享给其他人,或者用Excel进一步分析。

我经常会保存一些典型问题的Procmon日志,作为以后排查类似问题的参考。

查看事件属性

双击事件任意位置 或 右键 - Properties 可以查看事件属性。

属性有 Event(事件)、Process(进程)、Stack(堆栈)三个标签。

Event标签记录:开始时间、线程、事件类型、操作类型、操作结果、操作的文件路径、耗时。

image-20250927195650037

实战案例

分析NOTEPAD.EXE启动过程

清空过滤器

点工具栏的过滤图标,打开过滤器。Reset 清空历史过滤,Apply 应用,OK 关闭窗口。

注意:每次使用前都看一眼这里的过滤规则,是否需要清空或调整。

image-20250927200314630

过滤浏览器进程

过滤字段选 Process Name根据进程名过滤,过滤规则选 is,过滤内容填notepad.exe 只看notepad.exe的进程,点Add添加到下面的列表中,Apply应用,OK关闭窗口。

image-20250927200556248

image-20250927200624346

捕获浏览器的启动过程。

关掉记事本后,点定位框图标开启监听,点垃圾桶图标清空列表。

打开记事本再关闭,就能看到记事本从启动、运行到关闭都做了什么。

我们可以看到,刚打开时,记事本的线程开始 Start 启动、Create 创建,开始读注册表、读写文件等。

image-20250927200904904

image-20250927200959353

操作类型

英文名称中文名称
CloseFile文件-关闭
CreateFile文件-创建
CreateMailSlot创建邮件位
CreatePipe创建管道
DeviceChange设备改变
DeviceloControl设备输入/输出控制
FileStreamInformation文件流信息
FileSystemControl文件系统控制
FlushBuffersFile清空缓冲文件
InternalDeviceloControl内部设备IO控制
LoadImage装载映像
LockFile文件-锁定
NotifyChangeDirectory提示改变目录
PlugAndPlay即插即用
Power电源
Process Create进程-创建
Process Defined进程-定义
Process Exit进程-关闭
Profiling interrupt配置中断
QueryAllInformationFile查询所有信息文件
QueryAttribbuteTagFile查询属性标签文件
QueryAttributelnformationVolume查询属性信息卷
QueryBasicInformationFile查询基本信息文件
QueryCompressionInformationFile查询压缩信息文件
QueryControllnformationVolume查询控制信息卷
QueryDevicelnformationVolume查询设备信息卷
QueryDirectory查询-目录
QueryEAFile查询EA文件
QueryEalnformationFile查询EA信息文件
QueryFilelnternallnformationFile查询文件内部信息文件
QueryFileQuota查询文件配额
QueryFullSizelnformationVolume查询全尺寸信息卷
QuerylnformationVolume查询信息卷
QueryLabellnformationVolume查询标签信息卷
QueryMinorCode查询副编码
QueryMoveClusterlnformationFile查询移动族信息文件
QueryNamelnformationFile查询名字信息文件
QueryNetworkOpenlnformationFile查询网络开启信息文件
QueryObjectldInformationVolume查询对象ID信息卷
QueryOpen查询-打开
QueryPositionInformationFile查询位置信息文件
QuerySecurityFile查询安全文件
QuerySizelnformationVolume查询尺寸信息卷
QueryStandardInformationFile查询标准信息文件
QueryStreamInformationFile查询流信息文件
ReadFile文件-读取
RegCloseKey注册表-关闭键
RegCreateKey注册表-创建键
RegDeleteKey注册表-删除键
RegDeleteValue注册表-删除值
RegEnumKey注册表-枚举键
RegEnumValue注册表-枚举值
RegFlushKey注册表-清空键
RegLoadKey注册表-读取键
RegOpenKey注册表-打开键
RegQueryKey注册表-查询键
RegQueryKeySecurity注册表-查询键安全性
RegQueryMultipleValueKey查询多值键
RegQueryValue注册表-查询值
RegRenameKey注册表-重命名键
RegSetInfoKey设置信息键
RegSetKeySecurity注册表-设置键安全性
RegSetValue注册表-设置值
RegUnloadKey卸载键
SetAllInformationFile设置全信息文件
SetBasicInformationFile设置基本信息文件
SetDispositionlnformationFile设置部署信息文件
SetEAFile设置EA文件
SetEndOfFilelnformationFile设置文件结尾信息文件
SetFileQuota设置文件配额
SetLinkInformationFile设置连接信息文件
SetPipelnformation设置管道信息
SetPositionInformationFile设置位置信息文件
SetRenamelnformationFile设置重命名信息文件
SetSecurityFile设置安全文件
SetShortNamelnformation设置短名称信息
SetValidDataLengthInformationFile设置合法数据长度信息文件
SetVolumelnformation设置卷信息
Shutdown关闭
SystemControl系统控制
Thread Create线程-创建
Thread Exit线程-关闭
Thread Profile线程-Profile
UnlockFileAll文件解锁全部
WriteFile文件-写入

注意事项和限制

Procmon虽然强大,但也有一些需要注意的地方:

资源消耗
长时间运行Procmon会消耗不少系统资源,特别是内存。在生产环境使用时要注意控制监控时间和过滤条件。

日志文件大小
如果不设置过滤器,日志文件会增长得非常快。我见过几分钟就产生几GB日志的情况。

权限要求
Procmon需要管理员权限才能正常工作,这在某些受限环境下可能是个问题。

与其他工具的配合

Procmon通常不是单独使用的,我喜欢把它和其他工具配合:

Process Explorer
同样是Sysinternals套件的工具,用来查看进程详细信息。Procmon负责监控行为,Process Explorer负责分析进程本身。

Performance Monitor
Windows自带的性能监控工具,可以监控系统级别的性能指标。结合Procmon的详细日志,能更全面地分析问题。

Event Viewer
系统事件日志,有时候Procmon发现的问题在事件日志里也有相关记录。

一些实用的过滤器模板

经过这么多年的使用,我总结了几个常用的过滤器模板:

监控特定目录的文件操作

Path begins with C:\Program Files\YourApp\
Operation is WriteFile

查找访问被拒绝的操作

Result is ACCESS DENIED

监控注册表修改

Operation is RegSetValue
Path contains HKLM\Software\

查找网络相关操作

Operation contains TCP
Operation contains UDP

这些模板可以根据具体需求进行调整,基本能覆盖大部分常见的监控场景。

故障排查的一般流程

我现在排查Windows问题基本都有个固定套路:

  1. 先了解问题现象和复现步骤
  2. 打开Procmon,设置合适的过滤器
  3. 清空现有日志,开始监控
  4. 复现问题
  5. 停止监控,分析日志
  6. 根据发现的线索进一步调查

这个流程屡试不爽,解决了我遇到的大部分疑难杂症。

当然,Procmon也不是万能的,有些问题可能需要结合其他工具和方法。但作为第一步的排查工具,它绝对是首选。

学习建议

如果你想熟练掌握Procmon,我建议:

多实践
光看教程是不够的,要在实际环境中多用。可以故意制造一些问题,然后用Procmon来分析。

了解Windows内部机制
对Windows的文件系统、注册表、进程管理有基本了解,能帮助你更好地理解Procmon的输出。

学会看日志
Procmon的日志信息很丰富,要学会从中提取有用的信息,忽略无关的噪音。

建立知识库
把遇到的典型问题和解决方案记录下来,形成自己的知识库。

说实话,掌握了Procmon之后,我对Windows系统的理解深入了很多。以前遇到问题只能瞎猜,现在能够有理有据地分析。这种从"玄学"到"科学"的转变,让我在工作中更加自信。

现在每当有同事遇到奇怪的Windows问题,我都会推荐他们试试Procmon。虽然刚开始可能觉得复杂,但一旦上手,就会发现它的强大之处。

Process Monitor真的是每个Windows运维人员都应该掌握的工具。它不仅能帮你快速定位问题,还能让你对系统运行机制有更深入的理解。在这个信息爆炸的时代,拥有这样一个可靠的分析工具,就像在黑暗中有了一盏明灯。

希望这篇文章能帮到正在为Windows问题头疼的朋友们。如果你觉得有用,别忘了点赞转发,让更多人知道这个神器的存在。


如果这篇文章对你有帮助,别忘了点赞转发支持一下!想了解更多运维实战经验和技术干货,记得关注微信公众号@运维躬行录,领取学习大礼包!!!我会持续分享更多接地气的运维知识和踩坑经验。让我们一起在运维这条路上互相学习,共同进步

公众号:运维躬行录

个人博客:躬行笔记

文章目录

博主介绍

热爱技术的云计算运维工程师,Python全栈工程师,分享开发经验与生活感悟。
欢迎关注我的微信公众号@运维躬行录,领取海量学习资料

微信二维码