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

问题描述 投票:23回答:7

我想通过所有的活动进程,以找到一种方法,循环和他们(内存使用,CPU时间等),有点类似于任务管理器做诊断检查。

这个问题被分解为两个部分:

  1. 找到所有进程
  2. 发现诊断属性对他们

我不知道,甚至在什么命名空间中去寻找它。任何帮助/技巧/链接感谢。

c# .net pid diagnostics
7个回答
71
投票

找到所有的过程

您可以通过过程来实现这个目的

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);
}

8
投票

找到所有过程是相当容易的实际上是:

using System.Diagnostics;

Process[] processes = Process.GetProcesses();

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

4
投票

JaredPar已经指出Process类,所以我就补充一点,你应该知道,那类需要过程的快照创建实例时的信息。这不是一个实时取景。要更新它,你必须调用Refresh()的实例。

也请记住,当你正检查它的进程可能会关闭,所以准备捕获异常,并相应地处理它们。

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


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


0
投票

那么你可以在PowerShell中做到这一点

1.Finding所有进程

get-Process 

2.Finding诊断属性对他们

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

上面的代码将返回所有进程拥有超过200手柄,你可以用这种方式很容易地指定您的诊断属性。

有关how to handle processes using powershell see this更多信息


0
投票
using System.Diagnostics;

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

此处过程数组包含本进去过程的所有数。


0
投票

这是我喜欢访问的过程:

static void Main(string[] args)
{
    Process.GetProcesses().ToList().ForEach(p =>
    {
        Console.WriteLine(
            p.ProcessName + " p.Threads.Count=" + p.Threads.Count + " Id=" + p.Id);
    });

    Console.ReadKey();
}
© www.soinside.com 2019 - 2024. All rights reserved.