全站数据
8 4 2 0 5 8 1

Process Explorer是什么

电气电工圈 | 简单学习,快乐成才!         
问题更新日期:2024-10-29 14:03:05

问题描述

Process Explorer是什么,麻烦给回复
精选答案
最佳答案

时代的浪潮呼啸而去,Windows似乎已死在了沙滩上。今天已没有多少人还会从头到尾研读Windows时代下的那些经典书籍,以及MSDN了吧?这是由一个名为System Internals的公司开发的软件,只有两名员工。后来被微软收购了,两名员工据说也都留在微软工作。他们的网站已经不能访问了,当年这个网站上有不少非常有用的工具和有深度的文章。这些软件和文章现在都归到了Windows Sysinternals中。在Sysinternals Process Utilities这一节中,还可以看到当年的一些工具,Process Explorer, psExec, Handles等等。一 般我们使用ProcessExplorer来查看进程资源使用相关的信息。比如某个进程加载了哪些DLL(特别是当你怀疑加载了版本错误的dll时)。当文件删除不掉时,也会用它 来查看是哪个进程打开了这个文件(类似linux下的lsof)。要知道一个进程是如何使用内存的,你也应该使用这个工具–而不要相信TaskManager–主要是Task Manager中使用的术语从Windows95以来一直在变化,老实说作为一个程序员,我已经很难记清楚某个版本的TaskManager中所称的某个内存值究竟是什么含义。Windows这样做是为了照顾一些非程序员,从而希望在术语的使用上更易懂。但对程序员来 讲,Process Explorer的定义更准确,也没有变更过。最后介绍一个ProcessExplorer的必杀技:帮你分分钟找出CPU Hog的罪魁祸首!原理是这样的,当一个进程陷入CPUHog时,往往是由某个函数调用引起的(或者在这个函数中存在死循环),这个时候你去查看线程栈,很容易看到具体是哪几行代码在执行。就这么简单!当然, 你需要将符号文件配置好,以便使得Process Explorer可以正确地还原调用栈。顺便说一句,这并不是ProcessExplorer的功能,而是Windows自身提供的dbghelp.dll的能力。这个功能应该从windows95起就存在(不过那个时候似乎没有dbghelp.dll,我们要实现类似的功能必须自己想办法),但我开始使用ProcessExplorer来调查CPU Hog应该是从2006年左右起–因为那时候我们才用上了有双核或者超线程的CPU。在此之前,一旦发生CPUHog,我们常常只有绝望地关掉机器,因为此时CPU完全被占满,几乎没有任何可能来运行任何调试工具。我遇到过的CPU Hog的原因:程序中有引擎+脚本结构的。比如杀毒软件,一般会有一个杀毒引擎,病毒码往往都是一小段特殊的脚本。有时候这些脚本在某些情况下导致引擎陷入死循环。正则表达式也是由正则表达式引擎,正则表达式和被匹配的模式构成的,平常测试时无法发现问题,但有时候特殊的模式会触发正则表达式引擎陷入死循环。这似乎是我在查CPU Hog问题时遇到的比较多的一个坑。循环中的上边界是一个变量,但被错误赋值成无限大的一个值;或者循环中出现错误导致循环次数变量的自增被忽略。在多线程程序中,如果对一个List之类的结构进行遍历,但又错误地修改了迭代器指向。本质上还是跟2是一致的。网络攻击迫使CPU要处理大量的事务。这种情况下一般会伴随网络带宽增加–当然你要知道你的正常带宽消耗是多少。还有一次遇到杀毒引擎的错。杀毒引擎查到一个文件染毒时,一般应该将其清除或者隔离。放入隔离区的文件是不能访问、运行的,杀毒引擎也不会再对它进行处理。但有一次遇到杀毒引擎隔离文件失败,对一个文件反复查杀和隔离,从而导致CPU Hog。