claim.gif
Linux Magazin Linux User Easy Linux Ubuntu User International Linux Community
Erschienen in EasyLinux 09/2006   »   Ausgabe bestellen

Prozesse kontrollieren und beenden

Prozessen mit der Axt kommen

Heike Jurzik


Eine Anwendung reagiert nicht mehr auf Tastatur und Maus, oder die grafische Oberfläche streikt? Unter Linux sind derartige Abstürze eher selten, aber wenn sich doch einmal ein Programm aufhängt, gibt es verschiedene Wege, die Störenfriede loszuwerden -- ohne PC-Neustart.

Linux ist sehr stabil und läuft auch dann noch weiter, wenn eine einzelne Anwendung Probleme bereitet. Stürzt ein Programm ab, finden Sie mit wenigen Handgriffen mehr über die laufenden Prozesse heraus und beenden gezielt widerspenstige Programme.

Prozesse betrachten -- grafisch und in der Shell

Mit verschiedenen Tools betrachten Sie die laufenden Prozesse und finden mehr über diese heraus. Wer mit KDE arbeitet, startet z. B. über [Alt-F2] und Eingabe von ksysguard die KDE-Systemüberwachung. Der Reiter Prozesstabelle präsentiert eine Liste aller laufenden Prozesse. Per Klick auf die jeweilige Spalte sortieren Sie die Ausgabe, z. B. nach Programmnamen, PID (Prozessnummer), Benutzerkennung und vielem mehr. Ein Klick in die Checkbox Baum zeigt die Beziehungen zwischen den Prozessen in einer Baumstruktur an (Abbildung 1).

KSysguard bietet außerdem ein Drop-down-Menü, über das Sie festlegen, welche Prozesse das Programm anzeigt: alle, Systemprozesse, Benutzerprozesse oder nur die eigenen.


Beziehungen: Prozesse starten nicht einfach von selbst, sondern werden von anderen Prozessen ins Leben gerufen. Der Prozess, von dem sich alle anderen ableiten, heißt init und hat die ID 1. Ein Prozess, der einen anderen startet, heißt Elternprozess (englisch: parent process), der andere Kind (englisch: child process).

Abb. 1: Laufende Prozesse in der Baumansicht: "init" hat die ID 1 und ist Vater, Großvater etc. aller anderen Prozesse des Systems.

Auf der Konsole betrachten Sie die laufenden Prozesse mit ps. Geben Sie dieses Kommando ohne weitere Parameter in ein Terminalfenster ein, sehen Sie nur die in dieser Shell gestarteten Programme. Um mit ps alle eigenen Prozesse auszugeben, hängen Sie einfach die Option x an (siehe Kasten "Eigene Prozesse anzeigen").

Eigene Prozesse anzeigen
$ ps x
 3998 ?        Ss     0:00 /bin/sh /usr/bin/startkde
 4056 ?        Ss     0:00 /usr/bin/ssh-agent /usr/bin/startkde
 4082 ?        Ss     0:00 kdeinit Running...
 4085 ?        S      0:01 kdeinit: dcopserver --nosid
...

Damit diese recht lange Liste nicht aus dem Terminal herausscrollt, leiten Sie diese über ein Pipe-Zeichen (Tastenkombination [AltGr-<]) an den Betrachter less weiter: ps x | less. Nun können Sie mit den Pfeiltasten hoch- und runterblättern und sich die Prozesse in aller Ruhe anschauen; Sie beenden less mit [Q].

Wer sich nicht nur für die eigenen, sondern für alle gerade laufenden Prozesse interessiert, verwendet zwei weitere Schalter: Über a blenden Sie alle Prozesse ein, und u zeigt in der Ausgabe zusätzlich die Benutzernamen an (Abbildung 2).

Abb. 2: Was ist los auf dem System? "ps aux" verrät alle Details.

Noch mehr über Prozesse erfahren

Genau wie KSysguard zeigt ps viele Zusatzinformationen an. Interessant in der ps-Ausgabe ist vor allem die Spalte STAT, die den Zustand eines Prozesses enthält. (KSysguard zeigt den Status standardmäßig nicht an; Sie blenden diesen ein, indem Sie mit der rechten Maustaste auf einen Listeneintrag klicken und aus dem Kontextmenü Spalte anzeigen / Status wählen.) In den meisten Fällen sehen Sie für Prozesse einen der beiden folgenden Zustände:

Zeigt das Feld STAT hingegen ein D, ist der Prozess im so genannten nicht-unterbrechbaren Schlaf, d. h., man kann ihn nicht mehr aufwecken. Meist wartet er in diesem Zustand auf den Abschluss einer I/O-Operation, z. B. einen Festplattenzugriff.

In seltenen Fällen haben Sie sich einen Zombie eingefangen, den Sie am Zeichen Z und der Angabe <defunct> erkennen. Ein Grund zur Sorge ist das nicht -- ein Zombie ist ein Prozess, der schon beendet wurde, dessen Elternprozess aber (noch) nicht den Rückgabewert des Prozesses abgefragt hat, z. B. weil er selbst gerade schläft.

Geschickt filtern auf der Kommandozeile

In KSysguard filtern Sie die Ausgabe durch Mausklicks auf die einzelnen Spalten, über das Drop-down-Menü und durch Scrollen. Auf der Shell geht das eleganter: Reagiert beispielsweise das Konqueror-Fenster nicht mehr auf Ihre Eingaben, finden Sie mit ps und grep [1] in einem einzigen Befehl den problematischen Prozess. Den Dateimanager haben Sie selbst gestartet, also reicht der Schalter x aus, über den Sie die eigenen Prozesse anzeigen. Die Ausgabe des ps-Befehls leiten Sie wiederum über ein Pipe-Zeichen (siehe Abschnitt Prozesse betrachten -- grafisch und auf der Konsole) an das Programm grep weiter, mit dem Sie in der Ausgabe nun nach allen Vorkommen von konqueror suchen. Teilen Sie grep zudem über die Option -i mit, dass es Groß- und Kleinschreibung ignorieren soll -- so müssen Sie nicht erst überlegen, wie der Aufrufbefehl des gesuchten Programms geschrieben wird:

$ ps x | grep -i konqueror
5468 ?      D   0:51 kdeinit: konqueror -session 101...
5898 pts/7  R+  0:00 grep -i konqueror

Das Programm grep hat zwei Treffer gefunden: den Konqueror-Prozess und den grep-Aufruf selbst. Am Anfang der Zeile sehen Sie die jeweilige Prozessnummer (PID), die Sie für die im nächsten Abschnitt vorgestellten kill-Befehle auf der Konsole benötigen.

Prozesse beenden: sanft und mit Nachdruck

Sowohl mit KSysguard als auf der Shell (mit dem Programm kill) schicken Sie gezielt Signale an störrische Prozesse. Beachten Sie, dass Sie dabei immer nur eigene Programme beeinflussen können, also diejenigen, die unter Ihrer Benutzerkennung laufen. Sollten Sie einen systemweiten Prozess beenden müssen, starten Sie KSysguard über [Alt-F2], den Befehl kdesu ksysguard und Eingabe des Root-Passworts (unter Ubuntu tippen Sie Ihr eigenes Kennwort) im Administratormodus. Auf der Kommandozeile geben Sie su -, gefolgt vom Root-Passwort, bzw. unter Ubuntu sudo -s mit eigenem Kennwort ein, um als Root zu arbeiten.

Anders als der Name vermuten lässt, gehören zu den Signalen nicht nur Aufforderungen, einen Prozess gewaltsam zu beenden, sondern auch solche, Konfigurationsdateien neu einzulesen, eine Pause zu machen, die Arbeit wiederaufzunehmen usw. Für widerspenstige Prozesse verwenden Sie im Wesentlichen zwei Signale:

Für das abgestürzte Konqueror-Fenster heißt das: In KSysguard klicken Sie mit der rechten Maustaste auf den Eintrag in der Liste und wählen dann Signal senden / SIGTERM. Auf der Kommandozeile lassen Sie hingegen den Befehl kill auf die vorher herausgefischte PID los: kill 5468. Zeigt das keine Wirkung, greifen Sie zu drastischeren Mitteln. In KSysguard wählen Sie Signal senden / SIGKILL, und auf der Shell heißt das Kommando kill -9 5468. Weigert sich das Fenster auch dann noch, von der Bildfläche zu verschwinden, greifen Sie zu einem Trick: Drücken Sie [Strg-Alt-Esc]. Der Mauszeiger verwandelt sich dann in einen Totenkopf, und mit einem Klick auf das hartnäckige Programmfenster schließen Sie es.

KDE/Gnome gewaltsam beenden

In sehr seltenen Fällen verabschiedet sich nicht nur ein einzelnes Programm, sondern die gesamte grafische Oberfläche. In der Regel gibt es aber auch hier einen Weg aus der Misere, ohne den Rechner neu starten zu müssen. Versuchen Sie zunächst, mit [Strg-Alt-Rückschritt] den X-Server gewaltsam zu beenden. Dabei gehen ungespeicherte Daten in geöffneten Anwendungen verloren. Anschließend sollten Sie nach kurzer Zeit den Anmeldemanager sehen, und Sie können sich mit Benutzername und Passwort neu anmelden bzw. den Rechner herunterfahren oder neu starten.

Reagiert das System nicht auf die Tastatureingaben und haben Sie zufällig einen weiteren Rechner im lokalen Netzwerk, von dem aus eine Verbindung per SSH möglich ist, gibt es eine weitere Möglichkeit, den X-Server neu zu starten: Melden Sie sich zunächst, wie unter [2] beschrieben, via SSH am Linux-Rechner an. Werden Sie danach (wie im vorherigen Abschnitt gezeigt) zum Systemverwalter. Unter Suse Linux starten Sie den Displaymanager über rckdm restart neu; unter Mandriva Linux 2006 heißt das Kommando /etc/init.d/dm restart. Wer auf (K)Ubuntu setzt, tippt /etc/init.d/kdm restart oder /etc/init.d/gdm restart -- abhängig davon, ob KDM oder GDM als Displaymanager läuft. Anschließend können Sie sich neu an der grafischen Oberfläche anmelden. (hge)

Infos
[1] Artikel zu grep: Elisabeth Bauer, "Textfischer -- Textdateien durchsuchen mit grep", EasyLinux 10/2003, S. 74 ff., http://www.easylinux.de/2003/10/074-grep/
[2] SSH-Artikel: Elisabeth Bauer, "Remote Control -- ssh und scp", EasyLinux 11/2003, S. 72 ff., http://www.easylinux.de/2003/11/072-guru-ssh/

Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links" nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedruckten Fassung entsprechen.

Druckerfreundliche Version | Feedback zu dieser Seite | Datenschutz | © 2017 COMPUTEC MEDIA GmbH | Last modified: 2008-11-05 17:02

Nutzungsbasierte Onlinewerbung

[Linux-Magazin] [LinuxUser] [Linux-Community] [Admin-Magazin] [Ubuntu User] [Smart Developer] [Linux Events] [Linux Magazine] [Ubuntu User] [Admin Magazine] [Smart Developer] [Linux Magazine Poland] [Linux Community Poland] [Linux Magazine Brasil] [Linux Magazine Spain] [Linux Technical Review]