【发布时间】:2008-10-09 15:52:18
【问题描述】:
如何检测一个进程是否已经在 Windows 任务管理器下运行?我也想获得内存和cpu使用情况。
【问题讨论】:
如何检测一个进程是否已经在 Windows 任务管理器下运行?我也想获得内存和cpu使用情况。
【问题讨论】:
简单的例子...
bool processIsRunning(string process)
{
return (System.Diagnostics.Process.GetProcessesByName(process).Length != 0);
}
糟糕...忘记了内存使用等...
bool processIsRunning(string process)
{
System.Diagnostics.Process[] processes =
System.Diagnostics.Process.GetProcessesByName(process);
foreach (System.Diagnostics.Process proc in processes)
{
Console.WriteLine("Current physical memory : " + proc.WorkingSet64.ToString());
Console.WriteLine("Total processor time : " + proc.TotalProcessorTime.ToString());
Console.WriteLine("Virtual memory size : " + proc.VirtualMemorySize64.ToString());
}
return (processes.Length != 0);
}
(我将把从方法中获取数据的机制留给您 - 现在是 17:15,我准备回家了。:)
【讨论】:
您是否查看过System.Diagnostics.Process 类。
【讨论】:
如果您想了解正在运行的 IE 进程:
System.Diagnostics.Process[] ieProcs = Process.GetProcessesByName("IEXPLORE");
if (ieProcs.Length > 0)
{
foreach (System.Diagnostics.Process p in ieProcs)
{
String virtualMem = p.VirtualMemorySize64.ToString();
String physicalMem = p.WorkingSet64.ToString();
String cpu = p.TotalProcessorTime.ToString();
}
}
【讨论】:
您可以使用System.Diagnostics.Process 类。
有一个 GetProcesses() 和一个 GetProcessesByName() 方法将获取数组中所有现有进程的列表。
Process 对象包含检测进程是否正在运行所需的所有信息。
【讨论】:
您可以使用 WMI 来查询类似的内容
"SELECT * FROM Win32_Process WHERE Name = '<your process name here>'"
不过,WMI 尤其是处理器的使用有点棘手。正如Ian Jacobs 所建议的那样,使用 System.Diagnostics.Process 可能会更好。
【讨论】:
类似这样的:
foreach ( WindowsProcess in Process.GetProcesses)
{
if (WindowsProcess.ProcessName == nameOfProcess) {
Console.WriteLine(WindowsProcess.WorkingSet64.ToString);
Console.WriteLine(WindowsProcess.UserProcessorTime.ToString);
Console.WriteLine(WindowsProcess.TotalProcessorTime.ToString);
}
}
【讨论】: