Como posso listar todos os processos em execução no Windows?

Eu gostaria de encontrar uma maneira de percorrer todos os processos ativos e fazer verificações de diagnósticos sobre eles (uso de mem, tempo de cpu etc) um pouco semelhante ao gerenciador de tarefas.

O problema é dividido em duas partes:

  1. Encontrando todos os processos
  2. Localizando atributos de diagnósticos sobre eles

Eu não tenho certeza nem em qual namespace procurar. Qualquer ajuda / dicas / links é grato.

Encontrando todos os processos

Você pode fazer isso através da class Process

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

Executando diagnósticos

Você pode nos dar mais algumas informações aqui? Não está claro o que você quer fazer.

A class Process fornece algumas informações que podem ajudá-lo. É possível consultar essa class para

  • Todos os tópicos
  • Maçaneta da janela principal
  • Todos os módulos carregados
  • Várias informações de diagnóstico sobre Memória (Paginada, Virtual, Conjunto de Trabalho, etc …)
  • Informações Básicas do Processo (id, nome, localização do disco)

EDITAR

OP mencionou que eles querem obter informações de memory e CPU. Essas propriedades estão prontamente disponíveis na class Process (retornada por GetProcesses ()). Abaixo está a página do MSDN que lista todas as propriedades suportadas. Existem vários tipos de memory e CPU disponíveis que atenderão às suas necessidades.

http://msdn.microsoft.com/pt-br/library/system.diagnostics.process.aspx

Código:

Adicione esta linha à sua lista de uso:

 using System.Diagnostics; 

Agora você pode obter uma lista dos processos com o método Process.GetProcesses (), conforme visto neste exemplo:

 Process[] processlist = Process.GetProcesses(); foreach (Process theprocess in processlist) { Console.WriteLine("Process: {0} ID: {1}", theprocess.ProcessName, theprocess.Id); } 

Encontrar todos os processos é bastante fácil atualmente:

 using System.Diagnostics; Process[] processes = Process.GetProcesses(); foreach (Process process in processes) { //Get whatever attribute for process } 

O JaredPar já apontou a class Process , portanto, vou apenas acrescentar que você deve estar ciente de que a class obtém um instantâneo das informações do processo quando a instância é criada. Não é uma visão ao vivo. Para atualizá-lo, você deve chamar Refresh() na instância.

Também tenha em mente que o processo pode fechar enquanto você está inspecionando, então esteja preparado para pegar exceções e lidar com elas de acordo.

E, finalmente, se você chamar Process.GetProcesses() você também obterá os pseudo processos “inativo” e “sistema”. IIRC eles têm IDs de processo específicos para que você possa filtrá-los facilmente.

Qual sistema operacional você está usando? Eu tomo isso da sua tag c # que é windows?

Em caso afirmativo, confira o WMI, especialmente a class Win32_Process. Aqui está a referência do MSDN: http://msdn.microsoft.com/en-us/library/aa394372(VS.85).aspx

Bem como alguns cenários de uso aqui (como obter uma lista de processos): http://msdn.microsoft.com/en-us/library/aa394599(VS.85).aspx

Bem, você pode fazer isso no powershell

1. Encontrando todos os processos

 get-Process 

Atributos de diagnóstico 2.Finding sobre eles

 get-Process | where-object { $_.Handles -gt 200 } 

O código acima irá retornar todos os processos com mais de 200 alças, você pode especificar seus atributos de diagnóstico dessa maneira facilmente.

Para obter mais informações sobre como lidar com processos usando o PowerShell, veja este

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

aqui process arrray contém todo o número de processos presentes nele.