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

Posted

技术标签:

【中文标题】如何列出在 Windows 中运行的所有进程?【英文标题】:How can I list all processes running in Windows? 【发布时间】:2009-03-15 19:44:54 【问题描述】:

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

问题分为两部分:

    查找所有进程 查找有关它们的诊断属性

我什至不确定要在哪个命名空间中查找它。任何帮助/提示/链接都非常感谢。

【问题讨论】:

【参考方案1】:

查找所有进程

您可以通过 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);

【讨论】:

【参考方案2】:

实际上查找所有进程相当容易:

using System.Diagnostics;

Process[] processes = Process.GetProcesses();

foreach (Process process in processes)

    // Get whatever attribute for process.

【讨论】:

【参考方案3】:

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

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

最后,如果您调用Process.GetProcesses(),您还将获得伪进程“空闲”和“系统”。 IIRC 它们具有特定的进程 ID,因此您可以轻松地将它们过滤掉。

【讨论】:

感谢您的发现。我一定会记住这一点 +1【参考方案4】:

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

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

【讨论】:

【参考方案5】:

您使用的是什么操作系统?我从你的 C# 标记中得到它是 windows?

如果是这样,请检查 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

【讨论】:

是的,它是windows(它在主题中说)。 哈哈抱歉,我的疏忽大意了!【参考方案6】:

你可以在 powershell 中做到这一点

1.查找所有进程

get-Process 

2.查找有关它们的诊断属性

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

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

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

【讨论】:

【参考方案7】:
using System.Diagnostics;

class Program

   static void Main()
      
      Process[] processlist = Process.GetProcesses();`          
   

这里的进程数组包含所有存在的进程数。

【讨论】:

以上是关于如何列出在 Windows 中运行的所有进程?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Linux中查看所有正在运行的进程

windows下监控进程的脚本

列出所有进程及其当前的内存和 CPU 消耗?

如何在 Go 中列出所有匹配的进程? [关闭]

如何列出正在运行的屏幕会话?

Windows使用CMD命令查看进程和终止进程