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:
Je ne suis même pas sûr de savoir dans quel espace de nom regarder. Toute aide/conseils/liens est reconnaissant.
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
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);
}
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.
}
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.
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.
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
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();
}
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