我如何列出在Windows中运行的所有进程?

我想find一种方法来循环所有活动的进程,并对它们进行诊断检查(内存使用情况,CPU时间等)有点类似于任务pipe理器。

问题分解为两部分:

  1. find所有的过程
  2. 查找有关它们的诊断属性

我甚至不知道在什么名字空间去查找它。 任何帮助/技巧/链接是感激。

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包含了所有进程的数量。