如何在C#控制台中正确获取当前运行进程列表?
正确获取C#控制台程序中当前运行进程的方法
嘿,我注意到你写的var list = new List<int>(Process.GetProcesses());代码会报错,原因很简单:Process.GetProcesses()返回的是**Process[]类型的数组**,每个元素是包含进程详细信息的Process对象,而不是int类型,直接转List<int>类型是不兼容的。
下面给你几种符合需求的正确实现方式:
1. 获取进程ID的List<int>列表(匹配你最初的类型需求)
如果你只是想收集所有运行进程的ID,可以用LINQ提取每个Process对象的Id属性,再转成列表:
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; namespace ProcessDemo { class Program { static void Main(string[] args) { // 提取所有进程ID到List<int> List<int> processIds = Process.GetProcesses() .Select(process => process.Id) .ToList(); // 输出结果 Console.WriteLine("当前运行的进程ID:"); foreach (int id in processIds) { Console.WriteLine(id); } } } }
2. 获取完整的进程对象列表(方便查看更多进程信息)
如果需要获取进程的名称、内存占用等更多信息,建议直接把进程对象存入列表:
using System; using System.Collections.Generic; using System.Diagnostics; namespace ProcessDemo { class Program { static void Main(string[] args) { // 获取所有进程对象的列表 List<Process> runningProcesses = Process.GetProcesses().ToList(); // 遍历输出进程信息(注意捕获权限异常) Console.WriteLine("当前运行的进程详情:"); foreach (Process process in runningProcesses) { try { Console.WriteLine($"进程名:{process.ProcessName} | ID:{process.Id} | 内存占用:{process.WorkingSet64 / 1024 / 1024} MB"); } catch (UnauthorizedAccessException ex) { Console.WriteLine($"无法访问进程ID {process.Id}:{ex.Message}"); } } } } }
几个注意事项
- 必须引用
System.Diagnostics命名空间,否则无法使用Process类; - 部分系统进程会限制访问权限,遍历的时候记得加异常捕获,避免程序直接崩溃;
- 如果需要获取远程机器的进程,可以使用
Process.GetProcesses("远程机器名称"),但需要拥有对应机器的访问权限。
内容的提问来源于stack exchange,提问作者user8125500
相关产品推荐
相关产品推荐

