tag - c# summary example
¿Cómo puedo enumerar todos los procesos que se ejecutan en Windows? (7)
Me gustaría encontrar una manera de recorrer todos los procesos activos y hacer verificaciones de diagnóstico (uso de mem, tiempo de CPU, etc.) algo similar al administrador de tareas.
El problema se divide en dos partes:
- Encontrar todos los procesos.
- Encontrar atributos de diagnóstico sobre ellos.
No estoy seguro incluso en qué espacio de nombres voy a buscarlo. Cualquier ayuda / consejos / enlaces es agradecido.
Así es como prefiero acceder a los procesos:
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();
}
Bueno, puedes hacer esto en PowerShell.
1.Encontrando todos los procesos.
get-Process
2. Encontrar atributos de diagnóstico sobre ellos.
get-Process | where-object { $_.Handles -gt 200 }
El código anterior devolverá todos los procesos con más de 200 manejadores, puede especificar sus atributos de diagnóstico de esta manera fácilmente.
Para más información sobre cómo manejar procesos usando powershell vea esto
Encontrar todos los procesos es bastante fácil actualmente:
using System.Diagnostics;
Process[] processes = Process.GetProcesses();
foreach (Process process in processes)
{
//Get whatever attribute for process
}
JaredPar ya señaló la clase de Process
, por lo que solo agregaré que debe tener en cuenta que la clase toma una instantánea de la información del proceso cuando se crea la instancia. No es una vista en vivo. Para actualizarlo, debe llamar a Refresh()
en la instancia.
También tenga en cuenta que el proceso puede cerrarse mientras lo está inspeccionando, así que prepárese para detectar las excepciones y manejarlas en consecuencia.
Y, por último, si llama a Process.GetProcesses()
, también obtendrá los pseudo procesos "inactivo" y "sistema". IIRC tienen identificadores de proceso específicos para que puedas filtrarlos fácilmente.
Qué sistema operativo estás usando? ¿Lo tomo de tu etiqueta C # que son ventanas?
Si es así, revisa WMI, particularmente la clase Win32_Process. Aquí está la referencia de MSDN: http://msdn.microsoft.com/en-us/library/aa394372(VS.85).aspx
Además de algunos escenarios de uso aquí (como obtener una lista de procesos): http://msdn.microsoft.com/en-us/library/aa394599(VS.85).aspx
Encontrar todos los procesos.
Puedes hacer esto a través de la clase Process.
using System.Diagnostics;
...
var allProcesses = Process.GetProcesses();
Ejecución de diagnósticos
¿Puedes darnos más información aquí? No está claro lo que quieres hacer.
La clase de proceso proporciona un poco de información, aunque puede ayudarte. Es posible consultar esta clase para
- Todos los temas
- Manija de la ventana principal
- Todos los módulos cargados
- Información de diagnóstico diversa sobre la memoria (paginada, virtual, conjunto de trabajo, etc.)
- Información básica del proceso (ID, nombre, ubicación del disco)
EDITAR
OP mencionó que quieren obtener información de memoria y CPU. Estas propiedades están disponibles en la clase de proceso (devuelta por GetProcesses ()). A continuación se muestra la página de MSDN que enumera todas las propiedades compatibles. Hay varias memorias y CPU disponibles que se ajustarán a sus necesidades.
http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx
Código:
Agregue esta línea a su lista de uso:
using System.Diagnostics;
Ahora puede obtener una lista de los procesos con el método Process.GetProcesses (), como se ve en este ejemplo:
Process[] processlist = Process.GetProcesses();
foreach (Process theprocess in processlist)
{
Console.WriteLine("Process: {0} ID: {1}", theprocess.ProcessName, theprocess.Id);
}
using System.Diagnostics;
class Program
{
static void Main()
{
Process[] processlist = Process.GetProcesses();`
}
}
aquí el proceso arrray contiene todo el número de procesos presentes en él.