2009-03-15 15 views
19

Chciałbym znaleźć sposób na przechodzenie przez wszystkie aktywne procesy i sprawdzanie ich (użycie pamięci, czas procesora itp.) W podobny sposób jak w menedżerze zadań.Jak wyświetlić listę wszystkich procesów działających w systemie Windows?

Problemem jest podzielony na dwie części:

  1. znalezienie wszystkich procesów
  2. Znalezienie diagnostykę atrybuty o nich

Nie jestem pewien, nawet w tym, co nazw aby szukać o nim . Każda pomoc/wskazówki/linki są wdzięczne.

Odpowiedz

49

Znalezienie wszystkich procesów

Można to zrobić za pośrednictwem klasy Process

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

Running Diagnostics

możesz dać nam trochę więcej informacji tutaj? Nie jest jasne, co chcesz zrobić.

Klasa procesów dostarcza trochę informacji, ale może ci to pomóc. Jest to możliwe do tej klasy kwerendy dla

  • Wszystkie wątki
  • Główne okno Handle
  • Wszystkie załadowane moduły
  • Różne informacje diagnostyczne o pamięci (Paged, Virtual, zestaw roboczy, etc ...)
  • Podstawowe informacje procesowe (id, nazwa, lokalizacja dysku)

EDIT

Wspomniane opacje chcą uzyskać informacje o pamięci i procesorze. Te właściwości są łatwo dostępne w klasie Process (zwróconej przez GetProcesses()). Poniżej znajduje się strona MSDN, która zawiera listę wszystkich obsługiwanych właściwości. Dostępne są różne pamięci i procesory, które zaspokoją twoje potrzeby.

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

Kod:

Dodaj tę linię do listy za pomocą:

using System.Diagnostics; 

Teraz można uzyskać listę procesów z Process.GetProcesses() metoda, jak widać w tym przykładzie:

Process[] processlist = Process.GetProcesses(); 

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

Jakiego systemu operacyjnego używasz? Biorę to z twojego tagu C#, że to są okna?

Jeśli tak, sprawdź WMI, w szczególności klasę Win32_Process.Oto odniesienia MSDN: http://msdn.microsoft.com/en-us/library/aa394372(VS.85).aspx

Jak również kilka scenariuszy użycia tutaj (takich jak uzyskiwanie listę procesów): http://msdn.microsoft.com/en-us/library/aa394599(VS.85).aspx

+0

Tak, to jest okno (mówi w temacie). – Statement

+0

Haha przepraszam, ogromne przeoczenia z mojej strony! – CapBBeard

4

Znalezienie wszystkich procesów jest dość łatwy actualy:

using System.Diagnostics; 

      Process[] processes = Process.GetProcesses(); 

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

JaredPar wskazałem już klasę Process, więc dodam, że powinieneś mieć świadomość, że klasa robi migawkę informacji o procesie podczas tworzenia instancji. To nie jest widok na żywo. Aby go zaktualizować, musisz zadzwonić pod numer Refresh().

Należy również pamiętać, że proces ten może zostać zamknięty podczas kontroli, dlatego należy być przygotowanym na wychwytywanie wyjątków i odpowiednie postępowanie z nimi.

Wreszcie, jeśli zadzwonisz pod numer Process.GetProcesses(), otrzymasz również pseudo procesy "bezczynny" i "system". IIRC mają określone identyfikatory procesów, dzięki czemu można je łatwo odfiltrować.

+0

Dzięki za grosz. Będę na pewno o tym pamiętać +1 – Statement

0

Cóż można to zrobić w PowerShell

1.Finding wszystkie procesy

get-Process 

diagnostyka 2.Finding atrybuty o nich

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

Powyższy kod zwróci wszystkie procesy z ponad 200 uchwytów, możesz łatwo określić swoje atrybuty diagnostyczne.

Aby uzyskać więcej informacji na how to handle processes using powershell see this

0
using System.Diagnostics; 

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

tutaj procesowego arrray zawiera cały szereg procesów obecnej do niego.

+0

poprawić mrówczan – GAMITG

Powiązane problemy