2009-03-15 6 views
19

Je voudrais trouver un moyen de faire une boucle sur tous les processus actifs et d'effectuer des vérifications de diagnostic (utilisation de mem, temps CPU, etc.) un peu similaire au gestionnaire de tâches.Comment puis-je lister tous les processus s'exécutant sous Windows?

Le problème se décompose en deux parties:

  1. Trouver tous les processus
  2. Trouver le diagnostic des attributs concernant les

Je ne suis pas sûr que même dans ce que l'espace de noms pour aller chercher à ce sujet . Toute aide/conseils/liens est reconnaissant.

Répondre

49

Trouver tous les processus

Vous pouvez le faire grâce à la classe Process

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

Exécution des diagnostics

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

La classe de processus fournit un peu d'information qui pourrait vous aider. Il est possible d'interroger cette classe pour

  • Tous les sujets
  • fenêtre principale poignée
  • Tous les modules chargés
  • Divers informations de diagnostic sur la mémoire (paginé, virtuel, Set de travail, etc ...)
  • Informations sur le processus de base (id, nom, emplacement du disque)

EDITOp mentionné ils veulent obtenir de l'information sur la mémoire et l'unité centrale. Ces propriétés sont facilement disponibles dans la classe Process (renvoyée par GetProcesses()). Voici la page MSDN qui répertorie toutes les propriétés prises en charge. Il y a plusieurs mémoires et processeurs disponibles qui répondront à vos besoins.

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

code:

Ajouter cette ligne à votre liste en utilisant: Méthode

using System.Diagnostics; 

Maintenant, vous pouvez obtenir une liste des processus avec les Process.GetProcesses(), comme vu dans cet exemple:

Process[] processlist = Process.GetProcesses(); 

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

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

Outre quelques scénarios d'utilisation ici (par exemple obtenir une liste des processus): http://msdn.microsoft.com/en-us/library/aa394599(VS.85).aspx

+0

Oui c'est windows (ça dit dans le sujet). – Statement

+0

Haha désolé, massive négliger de ma part! – CapBBeard

4

Trouver tous les processus est assez facile actualy:

using System.Diagnostics; 

      Process[] processes = Process.GetProcesses(); 

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

JaredPar déjà souligné la classe Process, donc je vais juste ajouter, que vous devez être conscient, que la classe prend un instantané de l'information du processus lorsque l'instance est créée. Ce n'est pas une vue en direct. Pour le mettre à jour, vous devez appeler le Refresh() sur l'instance.

Gardez également à l'esprit que le processus peut se fermer pendant que vous l'inspectez. Préparez-vous à détecter les exceptions et à les gérer en conséquence.

Enfin, si vous appelez le Process.GetProcesses(), vous obtiendrez également les pseudo-processus "idle" et "system". IIRC ils ont des identifiants de processus spécifiques afin que vous puissiez les filtrer facilement.

+0

Merci pour le gotcha. Je vais être sûr de garder cela à l'esprit +1 – Statement

0

Eh bien, vous pouvez le faire dans powershell

1.Finding tous les processus

get-Process 

diagnostic 2.Finding attributs sur eux

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

Le code ci-dessus retournera tous les processus avec Plus de 200 poignées, vous pouvez spécifier vos attributs de diagnostic de cette manière facilement.

Pour plus d'informations sur how to handle processes using powershell see this

0
using System.Diagnostics; 

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

ici arrray processus contient tout le nombre de processus présents en elle.

+0

améliorer formate – GAMITG

Questions connexes