我如何列出在Windows中运行的所有进程?
我想find一种方法来循环所有活动的进程,并对它们进行诊断检查(内存使用情况,CPU时间等)有点类似于任务pipe理器。
问题分解为两部分:
- find所有的过程
- 查找有关它们的诊断属性
我甚至不知道在什么名字空间去查找它。 任何帮助/技巧/链接是感激。
find所有的过程
你可以通过Process类来做到这一点
using System.Diagnostics; ... var allProcceses = Process.GetProcesses();
运行诊断程序
你能在这里给我们更多的信息吗? 目前还不清楚你想要做什么。
stream程类提供了一些信息,虽然这可能会帮助你。 可以查询这个类
- 所有线程
- 主窗口句柄
- 所有加载的模块
- 有关内存(分页,虚拟,工作集等)的各种诊断信息
- 基本过程信息(id,名称,磁盘位置)
编辑
Op提到他们想获得内存和CPU信息。 这些属性在Process类(由GetProcesses()返回)上很容易得到。 下面是列出所有支持的属性的MSDN页面。 有各种各样的内存和CPU可用,将满足您的需求。
http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx
码:
将此行添加到您的使用列表中:
using System.Diagnostics;
现在,您可以使用Process.GetProcesses()方法获取进程的列表,如以下示例所示:
Process[] processlist = Process.GetProcesses(); foreach(Process theprocess in processlist){ Console.WriteLine(“Process: {0} ID: {1}”, theprocess.ProcessName, theprocess.Id); }
find所有的过程实际上是相当简单的:
using System.Diagnostics; Process[] processes = Process.GetProcesses(); foreach (Process process in processes) { //Get whatever attribute for process }
JaredPar已经指出了Process
类,所以我只是补充一下,你应该知道,类创build实例时会获取进程信息的快照。 这不是一个实时的看法。 要更新它,你必须在实例上调用Refresh()
。
另外要记住,在你检查过程中,这个过程可能会closures,所以要做好准备来捕捉exception并相应地处理它们。
最后,如果调用Process.GetProcesses()
您还将获得伪进程“空闲”和“系统”。 IIRC他们有特定的进程ID,所以你可以很容易地过滤出来。
你在使用什么操作系统? 我把它从你的C#标签,它是Windows?
如果是这样,请检查WMI,特别是Win32_Process类。 这是MSDN参考: http : //msdn.microsoft.com/en-us/library/aa394372(VS.85).aspx
以及这里的几个使用场景(例如获取进程列表): http : //msdn.microsoft.com/zh-cn/library/aa394599(VS.85 ) .aspx
那么你可以在PowerShell中做到这一点
1.find所有的过程
get-Process
find关于它们的诊断属性
get-Process | where-object { $_.Handles -gt 200 }
上面的代码将返回所有具有超过200个句柄的进程,您可以轻松地以这种方式指定您的诊断属性。
有关如何使用PowerShell处理进程的更多信息, 请参阅此
using System.Diagnostics; class Program { static void Main() { Process[] processlist = Process.GetProcesses();` } }
这里的进程arrray包含了所有进程的数量。