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

Sta*_*ent 29 .net c# diagnostics pid

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

问题分为两部分:

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

我甚至不确定要在哪个命名空间中查看它.任何帮助/提示/链接都很感激.

Jar*_*Par 74

查找所有流程

您可以通过Process类完成此操作

using System.Diagnostics;
...
var allProcesses = Process.GetProcesses();
Run Code Online (Sandbox Code Playgroud)

运行诊断程序

你能在这里给我们更多的信息吗?目前尚不清楚你想做什么.

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

  • 所有线程
  • 主窗把手
  • 所有加载的模块
  • 有关内存(分页,虚拟,工作集等)的各种诊断信息
  • 基本流程信息(ID,名称,磁盘位置)

编辑

OP提到他们想获得内存和CPU信息.这些属性在Process类上很容易获得(由GetProcesses()返回).下面是列出所有支持的属性的MSDN页面.有各种内存和CPU可供选择,以满足您的需求.

http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx

码:

将此行添加到您的使用列表:

using System.Diagnostics;
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用Process.GetProcesses()方法获取进程列表,如下例所示:

Process[] processlist = Process.GetProcesses();

foreach (Process theprocess in processlist)
{
    Console.WriteLine("Process: {0} ID: {1}", theprocess.ProcessName, theprocess.Id);
}
Run Code Online (Sandbox Code Playgroud)


Bri*_*sen 9

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

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

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


Mez*_*Mez 8

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

using System.Diagnostics;

Process[] processes = Process.GetProcesses();

foreach (Process process in processes)
{
    // Get whatever attribute for process.
}
Run Code Online (Sandbox Code Playgroud)