Pregunta

Me gustaría encontrar una manera de recorrer todos los procesos activos y hacer verificaciones de diagnóstico (uso de memoria, tiempo de CPU, etc.) similar al administrador de tareas.

El problema se divide en dos partes:

  1. Encontrar todos los procesos
  2. Encontrar atributos de diagnóstico sobre ellos

No estoy seguro ni siquiera en qué espacio de nombres buscar. Cualquier ayuda / consejos / enlaces es agradecida.

¿Fue útil?

Solución

Encontrar todos los procesos

Puede hacer esto a través de la clase Process

using System.Diagnostics;
...
var allProcesses = Process.GetProcesses();

Ejecución de diagnósticos

¿Puede darnos más información aquí? No está claro lo que quieres hacer.

La clase Process proporciona un poco de información, aunque eso podría ayudarlo. Es posible consultar esta clase para

  • Todos los hilos
  • Manija de la ventana principal
  • Todos los módulos cargados
  • Varios datos de diagnóstico sobre la memoria (paginado, virtual, conjunto de trabajo, etc.)
  • Información básica del proceso (id, nombre, ubicación del disco)

EDIT

OP mencionó que quieren obtener información sobre la memoria y la CPU. Estas propiedades están fácilmente disponibles en la clase Process (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 satisfarán sus necesidades.

http://msdn.microsoft.com/en- us / library / system.diagnostics.process.aspx

Código :

Agregue esta línea a su lista de usuarios:

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

Otros consejos

Encontrar todos los procesos es bastante fácil en realidad:

using System.Diagnostics;

Process[] processes = Process.GetProcesses();

foreach (Process process in processes)
{
    // Get whatever attribute for process.
}

JaredPar ya señaló la clase Process , así 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 excepciones y manejarlas en consecuencia.

Y, por último, si llama a Process.GetProcesses () también obtendrá los pseudoprocesos '' inactivo '' y "sistema". IIRC tienen identificadores de proceso específicos para que pueda filtrarlos fácilmente.

¿Qué sistema operativo estás usando? Supongo que de su etiqueta C # que es windows?

Si es así, consulte WMI, particularmente la clase Win32_Process. Aquí está la referencia de MSDN: http://msdn.microsoft. com / es-us / library / aa394372 (VS.85) .aspx

Además de algunas situaciones de uso aquí (como obtener una lista de procesos): http://msdn.microsoft.com/en-us/library/aa394599 (VS.85) .aspx

Bueno, puedes hacer esto en powershell

1.Encontrar todos los procesos

get-Process 

2.Encontrar atributos de diagnóstico sobre ellos

get-Process | where-object { 

Bueno, puedes hacer esto en powershell

1.Encontrar todos los procesos

get-Process 

2.Encontrar atributos de diagnóstico sobre ellos

<*>

El código anterior devolverá todos los procesos con más de 200 identificadores, puede especificar sus atributos de diagnóstico de esta manera fácilmente.

Para obtener más información sobre cómo manejar procesos usando powershell, consulte esto

.Handles -gt 200 }

El código anterior devolverá todos los procesos con más de 200 identificadores, puede especificar sus atributos de diagnóstico de esta manera fácilmente.

Para obtener más información sobre cómo manejar procesos usando powershell, consulte esto

using System.Diagnostics;

class Program
{
   static void Main()
   {   
      Process[] processlist = Process.GetProcesses();`          
   }
}

aquí la matriz de proceso contiene toda la cantidad de proceso presente en ella.

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();
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top