如何列出在 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 中运行的所有进程?的主要内容,如果未能解决你的问题,请参考以下文章