首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >这个神器让我找Bug如有神助!Process Monitor让Windows问题无处遁形

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

作者头像
悠悠12138
发布2025-09-29 15:21:03
发布2025-09-29 15:21:03
8600
代码可运行
举报
运行总次数:0
代码可运行

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

image-20250927201651846
image-20250927201651846

image-20250927201651846

什么是Process Monitor

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

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

下载和基本使用

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

image-20250927193514490
image-20250927193514490

image-20250927193514490

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

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

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

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

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

image-20250927194010787

过滤器的使用技巧

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

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

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

image-20250927194810989
image-20250927194810989

image-20250927194810989

image-20250927194842777
image-20250927194842777

image-20250927194842777

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

image-20250927194912872
image-20250927194912872

image-20250927194912872

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

高级功能探索

调整显示的列名
image-20250927195340755
image-20250927195340755

image-20250927195340755

image-20250927195403414
image-20250927195403414

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
image-20250927195104713

image-20250927195104713

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

image-20250927195136801
image-20250927195136801

image-20250927195136801

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

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

查看事件属性

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

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

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

image-20250927195650037
image-20250927195650037

image-20250927195650037

实战案例

分析NOTEPAD.EXE启动过程

清空过滤器

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

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

image-20250927200314630
image-20250927200314630

image-20250927200314630

过滤浏览器进程

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

image-20250927200556248
image-20250927200556248

image-20250927200556248

image-20250927200624346
image-20250927200624346

image-20250927200624346

捕获浏览器的启动过程。

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

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

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

image-20250927200904904
image-20250927200904904

image-20250927200904904

image-20250927200959353
image-20250927200959353

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发现的问题在事件日志里也有相关记录。

一些实用的过滤器模板

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

监控特定目录的文件操作

代码语言:javascript
代码运行次数:0
运行
复制
Path begins with C:\Program Files\YourApp\
Operation is WriteFile

查找访问被拒绝的操作

代码语言:javascript
代码运行次数:0
运行
复制
Result is ACCESS DENIED

监控注册表修改

代码语言:javascript
代码运行次数:0
运行
复制
Operation is RegSetValue
Path contains HKLM\Software\

查找网络相关操作

代码语言:javascript
代码运行次数:0
运行
复制
Operation contains TCP
Operation contains UDP

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

故障排查的一般流程

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

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

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

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

学习建议

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

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

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

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

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

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

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

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

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


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

公众号:运维躬行录

个人博客:躬行笔记

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-09-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维躬行录 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是Process Monitor
  • 下载和基本使用
  • 过滤器的使用技巧
  • 高级功能探索
  • 实战案例
    • 清空过滤器
    • 过滤浏览器进程
    • 捕获浏览器的启动过程。
  • 操作类型
    • 注意事项和限制
    • 与其他工具的配合
    • 一些实用的过滤器模板
    • 故障排查的一般流程
    • 学习建议
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档