web-dev-qa-db-fra.com

Comment puis-je lister tous les processus s'exécutant sous Windows

J'aimerais trouver un moyen de parcourir en boucle tous les processus actifs et d'effectuer des contrôles de diagnostic (utilisation de la mémoire, temps de l'unité centrale de traitement, etc.) un peu comme le gestionnaire de tâches. 

Le problème est divisé en deux parties:

  1. Trouver tous les processus
  2. Recherche d'attributs de diagnostic à leur sujet

Je ne suis même pas sûr de savoir dans quel espace de nom regarder. Toute aide/conseils/liens est reconnaissant.

23
Statement

Trouver tous les processus

Vous pouvez le faire via la classe Process

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

Exécution des diagnostics

Pouvez-vous nous donner plus d'informations ici? Ce que vous voulez faire n'est pas clair.

La classe Process fournit quelques informations qui pourraient vous aider. Il est possible d'interroger cette classe pour 

  • Toutes les discussions
  • Poignée de la fenêtre principale
  • Tous les modules chargés
  • Diverses informations de diagnostic sur la mémoire (paginée, virtuelle, jeu de travail, etc.)
  • Informations de base sur le processus (identifiant, nom, emplacement du disque)

MODIFIER

OP a indiqué qu'il souhaitait obtenir des informations sur la mémoire et le processeur. Ces propriétés sont facilement disponibles dans la classe Process (renvoyée par GetProcesses ()). Ci-dessous se trouve la page MSDN qui répertorie toutes les propriétés prises en charge. Il existe différentes mémoires et processeurs disponibles pour répondre à vos besoins.

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

Code:

Ajoutez cette ligne à votre liste d'utilisation:

using System.Diagnostics;

Maintenant, vous pouvez obtenir une liste des processus avec la méthode Process.GetProcesses (), comme dans cet exemple:

Process[] processlist = Process.GetProcesses();

foreach (Process theprocess in processlist)
{
    Console.WriteLine("Process: {0} ID: {1}", theprocess.ProcessName, theprocess.Id);
}
64
JaredPar

Trouver tous les processus est plutôt facile en réalité:

using System.Diagnostics;

Process[] processes = Process.GetProcesses();

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

JaredPar a déjà souligné la classe Process, je vais donc ajouter que vous devez savoir que la classe prend un instantané des informations du processus lors de la création de l'instance. Ce n'est pas une vue en direct. Pour le mettre à jour, vous devez appeler Refresh() sur l'instance. 

N'oubliez pas non plus que le processus peut se terminer pendant que vous l'inspectez. Soyez donc prêt à intercepter les exceptions et à les gérer en conséquence.

Et enfin, si vous appelez Process.GetProcesses(), vous obtiendrez également les pseudo processus "inactif" et "système". IIRC ils ont des ID de processus spécifiques afin que vous puissiez facilement les filtrer. 

4
Brian Rasmussen
using System.Diagnostics;

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

ici, le tableau de processus contient tout le nombre de processus présents.

0
Mahesh K Naik

Eh bien, vous pouvez le faire dans PowerShell

1. Trouver tous les processus

get-Process 

2.Rechercher des attributs de diagnostic à leur sujet

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

Le code ci-dessus renverra tous les processus comportant plus de 200 descripteurs. Vous pouvez ainsi spécifier facilement vos attributs de diagnostic.

Pour plus d'informations sur comment gérer les processus à l'aide de powershell, voir ceci

0
Binoj Antony

Voici comment je préfère accéder aux processus:

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();
}
0
RollRoll

Quel système d'exploitation utilisez-vous? Je prends de votre tag C # que c'est windows?

Si tel est le cas, consultez WMI, en particulier la classe Win32_Process. Voici la référence MSDN: http://msdn.Microsoft.com/en-us/library/aa394372(VS.85).aspx

En plus de quelques scénarios d’utilisation (tels qu’une liste de processus): http://msdn.Microsoft.com/en-us/library/aa394599(VS.85).aspx

0
CapBBeard