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

时间:2009-03-15 19:44:55

标签: c# .net pid diagnostics

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

问题分为两部分:

  1. 查找所有流程
  2. 查找有关它们的诊断属性
  3. 我甚至不确定要在哪个命名空间中查看它。任何帮助/提示/链接都很感激。

7 个答案:

答案 0 :(得分:68)

查找所有流程

您可以通过Process类

执行此操作
using System.Diagnostics;
...
var allProcesses = Process.GetProcesses();

运行诊断程序

您能在这里提供更多信息吗?目前尚不清楚你想做什么。

Process类提供了一些信息,虽然可以帮助你。可以查询此类

  • 所有主题
  • 主窗口句柄
  • 所有已加载的模块
  • 有关内存(分页,虚拟,工作集等)的各种诊断信息
  • 基本流程信息(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);
}

答案 1 :(得分:6)

实际上找到所有流程非常简单:

using System.Diagnostics;

Process[] processes = Process.GetProcesses();

foreach (Process process in processes)
{
    // Get whatever attribute for process.
}

答案 2 :(得分:4)

JaredPar已经指出了Process类,所以我只想补充一点,你应该知道,该类在创建实例时会获取进程信息的快照。这不是实时视图。要更新它,您必须在实例上调用Refresh()

另外请记住,在检查过程中,进程可能会关闭,因此请准备好捕获异常并相应地处理它们。

最后,如果你打电话给Process.GetProcesses(),你也会得到伪进程“空闲”和“系统”。 IIRC他们有特定的进程ID,因此您可以轻松过滤掉它们。

答案 3 :(得分:0)

您使用的是哪种操作系统?我从你的C#标签中取出它的窗口吗?

如果是这样,请查看WMI,尤其是Win32_Process类。这是MSDN参考:http://msdn.microsoft.com/en-us/library/aa394372(VS.85).aspx

此处还有一些使用方案(例如获取流程列表):http://msdn.microsoft.com/en-us/library/aa394599(VS.85).aspx

答案 4 :(得分:0)

你可以在powershell中做到这一点

1.找出所有过程

get-Process 

2.找到关于它们的诊断属性

get-Process | where-object { $_.Handles -gt 200 }

上面的代码将返回包含200多个句柄的所有进程,您可以轻松地以这种方式指定诊断属性。

有关how to handle processes using powershell see this

的更多信息

答案 5 :(得分:0)

using System.Diagnostics;

class Program
{
   static void Main()
   {   
      Process[] processlist = Process.GetProcesses();`          
   }
}

此处理arrray包含存在于其中的所有进程数。

答案 6 :(得分:0)

这是我更喜欢访问流程的方式:

name