Home
Navigation
Impressum
Coder Welten - Programmierung und Optimierung
Coder Welten
 
 

 

 

System-Diagnostics: Ausgabe von laufenden Systemprozessen

Methoden zum Überwachen von Systemprozessen

Die beiden auf dieser Seite vorgestellten Beispiele bauen auf die Process-Klasse auf, die Methoden zum Überwachen sowie zum Starten und Beenden von System­prozessen bereitstellt. Die Klasse gehört zum System.Diagnostics-Namespace. Ein Namespace oder Namensraum ist entfernt vergleichbar mit den Vorwahlen bei Rufnummern, nur dass im Bereich der Programmierung innerhalb eines Namespaces keine Telefonnummern zu finden sind, sondern Klassen mit Eigenschaften und Methoden.

Die Methode GetProcesses

Das erste Beispiel gibt eine Liste mit laufenden Prozessen aus, wobei auf die Methode GetProcesses zugegriffen wird, um mit Hilfe dieser Methode ein Array zu erstellen. Sind Dokumente in den Anwendungen geöffnet, werden die Titel der in den jeweiligen Hauptfenstern der Anwendungen geöffneten Dokumente zusammen mit den Beschriftungen der Hauptfenster ausgegeben.
Im Unterschied zu C++ werden in C++/CLI Objektzeiger nicht mit einem * Sternchen sondern mit einem ^ Zirkumflex gekennzeichnet.

Code-Listing der C++ Datei local-all.cpp

#using <System.dll>

using namespace System;
using namespace System::Diagnostics;
using namespace System::ComponentModel;

int main() {

    array<Process^>^localAll = Process::GetProcesses();

    Console::WriteLine("Gebe Prozesse aus: \r\n\r\n");

    if (localAll->Length > 0) {

        for each (Process^ line in localAll) {
            // Zeigt laufende Prozesse mit <Name> an
            Console::WriteLine(line);
            // Gibt den Titel aus, falls vorhanden
            if (line->MainWindowTitle->Length > 0) {
                Console::WriteLine(line->MainWindowTitle);
            }
        }
    }
    else {
        Console::WriteLine("Es sind keine Prozessdaten vorhanden!");
    }
    /*
    Verhindert das sich das Fenster schliesst, bevor die 
    Enter-Taste gedrueckt wurde.
    */
    Console::ReadLine();
    return 0;
}

Laufende
        Systemprozesse
Ausgabe: Eine Liste mit laufenden Prozessen

Die Methode GetProcessesByName

Im zweiten Beispiel wird nur der Prozess angezeigt, welcher der Methode GetProcessesByName als Wert übergeben wurde. Ist ein Dokument im Hauptfenster der Anwendung geöffnet, wird der Titel des Dokumentes als Teil der Beschriftung des Hauptfensters mit ausgegeben. Der vollständige Wert, bestehend aus Titel eines Dokumentes und Beschriftung des Hauptfensters, ist in der Eigenschaft MainWindowTitle enthalten.

Code-Listing der C++ Datei local-by-name.cpp

#using <System.dll>

using namespace System;
using namespace System::Diagnostics;
using namespace System::ComponentModel;

int main() {

    array<Process^>^localByName = Process::GetProcessesByName("firefox");

    Console::WriteLine("Gebe Prozesse aus: \r\n\r\n");

    if (localByName->Length > 0) {

        for each (Process^ line in localByName) {
            // Zeigt den Prozess mit <firefox> an
            Console::WriteLine(line);
            // Zeigt den Titel der gerade im Firefox geoeffnenten Webseite an.
            Console::WriteLine(line->MainWindowTitle);
        }
    }
    else {
        Console::WriteLine("Es sind keine Prozessdaten vorhanden!");
    }
    /*
    Verhindert das sich das Fenster schliesst, bevor die 
    Enter-Taste gedrueckt wurde.
    */
    Console::ReadLine();
    return 0;
}

Ein
        Systemprozess
Ausgabe: Ein laufender Prozess mit dem Titel des geöffneten Hauptfensters

Die Eigenschaften ID und HandleCount

Im dritten Beispiel wird als Wert für die Methode GetProcessesByName der Prozessname "httpd" benutzt, der den "Apache HTTP Server" bezeichnet. Gut ersichtlich wird im Screenshot, dass der Apache mit zwei Instanzen startet. Weiterhin werden die Werte der Eigenschaften ID und HandleCount abgefragt.
Bei der ID handelt es sich um einen eindeutigen Bezeichner für einen Prozess, der nach jedem Start des Apache Servers neu vom System generiert wird. Die Eigenschaft HandleCount bezieht sich hingegen auf die Anzahl der vom Prozess geöffneten Handles.

Code-Listing der C++ Datei local-by-name-httpd.cpp

#using <System.dll>

using namespace System;
using namespace System::Diagnostics;
using namespace System::ComponentModel;

int main() {

    int i = 1;
    array<Process^>^localByName = Process::GetProcessesByName("httpd");

    Console::WriteLine("Gebe Prozessdaten vom Apache aus: \r\n\r\n");

    if (localByName->Length > 0) {

        for each (Process^ line in localByName) {
            // Zaehlt mit wie vielen Instanzen der Apache gestartet wurde
            Console::WriteLine("Apache Instanz {0}", i++);
            // Zeigt den Prozess mit <name> an
            Console::WriteLine(line);
            // Gibt die eindeutige, vom System generierte ID für den Prozess aus
            Console::WriteLine("Prozess-ID: {0,8}", line->Id);
            // Zeigt die Anzahl der vom Prozess geoeffneten Handles an
            Console::WriteLine("Anzahl Handles: {0,4}\r\n", line->HandleCount);
        }
    }
    else {
        Console::WriteLine("Es sind keine Prozessdaten vorhanden!");
    }
    /*
    Verhindert das sich das Fenster von alleine schliesst, bevor die 
    Enter-Taste gedrueckt wurde.
    */
    Console::ReadLine();
    return 0;
}

Prozessdaten
        Apache
Ausgabe: Prozessdaten vom Apache Server

Beachtenswert ist weiterhin die Schreibweise bei Verwendung der Methode WriteLine. Die geklammerte {0} dient als Platzhalter für den eigentlichen Wert einer Variablen und die Ziffer nach dem Komma enthält die Anzahl an Leerstellen vor der Ausgabe, so dass eine gleichmäßige Ausrichtung der Ziffern ermöglicht wird.

 

Copyright © Verlag Horst Müller - Stendal - 2006 - Impressum - Datenschutz - Nutzungsbedingungen