logoOL.gif
user_gelb_schwarz_or.gif
logoUL.gif
logoUR.gif claim.gif
LinuxUser LinuxCommunity EasyLinux Linux-Magazin International
      Anzeige
TFT Monitor bei Mercateo kaufen.
Neues Netbook? Ein Preisvergleich lohnt sich.
Bei uns finden sie Notebooks, PDAs und Drucker mit Testberichten und Tipps.
Diamant Buchhaltungssoftware – transparent und detailliert auch für die Konzernbuchhaltung.
Günstige Shareware Programme als direkte Downloads im Software Portal.
Bis zu 70% sparen durch Preisvergleich.
      Anzeige

Erschienen in LinuxUser 03/2006   »   Ausgabe bestellen

Prozesse beobachten und beenden auf der Kommandozeile

Volle Kontrolle


Zahlreiche Prozesse tummeln sich auf einem Linux-System: Dieser Artikel bringt Licht ins Prozessdunkel, zeigt, wie Sie Tasks anhalten, fortsetzen oder beenden und verrät, wie Sie Überbleibsel von abgestürzten Programmen ins Jenseits befördern.

Heike Jurzik

README

Mit dem Programm Ps listen Sie Informationen zu Prozessen auf, der Prozessmonitor Top zeigt die aktuelle Speicherauslastung an. Auf welche Dateien bestimmte Prozesse zugreifen, erfahren Sie mit Hilfe von Lsof, und mit Kill und Killall entsorgen Sie unerwünschten Tasks.

Womit ist das Linux-System eigentlich gerade beschäftigt? Welche Programme und Prozesse laufen im Hintergrund? Welche Anwendung greift auf das CD-ROM-Laufwerk zu? Und wie beenden Sie einen Prozess mit Nachdruck, wenn dieser freiwillig nicht gehen will? Antworten auf diese und weitere Fragen bieten die Kommandos, die dieser Artikel vorstellt.

Prozesse mit Ps auflisten

Mit dem Programm Ps geben Sie eine Liste der laufenden Prozesse aus. Ohne weitere Angaben präsentiert das Kommando nur die Anwendungen, welche in der aktuellen Shell laufen. Darf's ein bisschen mehr Information sein, greifen Sie zu den zahlreichen Optionen des Tools. Wie die Manpage verrät, versteht Ps sowohl Unix-Parameter mit einfachem Bindestrich, BSD-Optionen ohne Bindestrich und GNU-Optionen mit zwei Bindestrichen.

Welche Variante Sie wählen, bleibt Geschmackssache; dieser Artikel konzentriert sich auf die tippfaule Variante ohne vorangestellte Minuszeichen. Um beispielsweise alle eigenen Prozesse auszugeben, verwenden Sie die Option x (Listing 1).

Listing 1
$ ps x
 PID TTY   STAT   TIME COMMAND
3705 ?     Ss     0:00 /bin/sh /usr/bin/startkde
3763 ?     Ss     0:00 /usr/bin/ssh-agent /usr/bin/startkde
3789 ?     Ss     0:00 kdeinit Running...
3792 ?     S      0:00 kdeinit: dcopserver --nosid
3794 ?     S      0:00 kdeinit: klauncher
...

Gut sortiert präsentiert das Ps-Kommando, welche Tasks unter Ihrer eigenen Benutzerkennung laufen. Dabei sortiert der Befehl die Ausgabe nach Process Identifier, die eindeutige Prozessnummer (PID), Nummer des Terminals oder der virtuellen Konsole (TTY), Zustand des Prozesses (STAT), verbrauchte Rechenzeit (TIME) und Befehlsname inklusive Parameter (COMMAND).

Im Feld STAT zeigt Ps meistens einen der folgenden Zustände an:

Wer nicht nur die eigenen Prozesse, sondern auch die Tasks der anderen Benutzer auf dem System sehen möchte, verwendet die Option a. Da in dieser langen Liste nicht zu erkennen ist, unter welcher Benutzerkennung die einzelnen Programme laufen, setzen Sie zusätzlich u ein, um den Eigentümer und die Rechenzeit und den Speicheranteil anzuzeigen (Listing 2).

Listing 2
$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 1504 512 ? S 08:31 0:00 init [2]
...
huhnix 3705 0.0 0.2 2748 1296 ? Ss 08:33 0:00 /bin/sh /usr/bin/startkde
...

Verwandtschaftsverhältnisse

Prozesse starten in einigen Fällen ihrerseits weitere Prozesse; der erste Prozess, der nach dem Booten losrennt, heißt immer init. Von diesem Elternprozess (parent process) ausgehend, leiten sich weitere Tasks ab; die Kinder (child processes) dürfen wiederum Prozesse starten und so weiter. Den Grad der Verwandtschaft zeigt Ihnen die Option l an; Ps blendet nun eine weitere Spalte mit der Parent Process ID (PPID) ein.

Noch übersichtlicher fällt die Struktur mit dem Parameter f, welcher die Hierarchie als ASCII-Bild malt. Alternativ greifen Sie zum Programm Pstree, welches ebenfalls die Verwandtschaftsverhältnisse darstellt (Abbildung ((1))).

((1)) Die Befehle ps f und pstree im Vergleich -- wer sieht den Wald vor lauten Bäumen noch?

Top ist topp!

Auf der Suche nach Speicherfressern tippen Sie sich mit Ps allerdings die Finger wund: Da Sie immer nur eine Momentaufnahme sehen, erfahren Sie kaum etwas über die aktuelle Auslastung des Systems. Für diesen Fall hat Linux das Programm Top mit an Bord -- der Prozessmonitor aktualisiert die Anzeige und präsentiert so den neuesten Stand. Sie starten den Monitor über Eingabe von top auf der Kommandozeile.

Das Programm präsentiert gleich eine ganze Reihe von Informationen zum System und den Prozessen: In der obersten Zeile blendet es Uhrzeit, Uptime des Rechners, die Anzahl der Prozesse und Angaben zu deren Status, sowie die Auslastung von CPU, Speicher und Swap ein. Welche Informationen Top zu den einzelnen Prozessen anzeigt, verrät das Programm in der Statuszeile.

Hier sehen Sie beispielsweise die Spalten Prozessnummer (PID), Speicherverbrauch in Prozent (%MEM), Prozessnummer des Elternprozesses (PPID), Benutzerkennung (UID), verbrauchte CPU-Zeit in Prozent (%CPU) und ausgeführter Befehl (COMMAND). Was Top alles präsentiert, legen Sie selbst fest: Drücken Sie [F] und wählen Sie durch Tippen der jeweiligen Buchstaben, was in der Statuszeile erscheint.

Darüber hinaus existieren noch andere Kommandos zum interaktiven Steuern von Top: So blenden Sie eine Online-Hilfe über Druck auf [H] ein. [U] gefolgt vom Benutzernamen zeigt Prozesse eines bestimmten Users, [Umschalt]+[R] kehrt die Ausgabe um und zeigt anstelle des speicherhungrigsten den bescheidensten Prozess. Über [Q] beenden Sie die Anwendung und kehren zur Eingabeaufforderung der Shell zurück.

Mit der Tastenkombination [Umschalt]+[Z] bringen Sie Farbe ins Spiel. Über die Taste [W] blättern Sie nun durch ein paar vordefinierte Farbschemata durch; alternativ legen Sie über die entsprechenden Buchstaben und Ziffern selbst das Aussehen fest (Abbildung ((2))).

((2)) Die Ausgabe des Prozessmonitors Top zeigt sich einmal in Farbe.

Und was bleibt?

Noch mehr Informationen zu den einzelnen Prozessen erhalten Sie mit dem Programm Lsof (list open files). Mit diesem Tool finden Sie heraus, welche Prozesse auf welche Dateien zugreifen. Ohne Angabe weiterer Parameter zeigt das Kommando alle Dateien auf, eine recht lange Liste, die Sie am einfachsten über einen Pager wie Less seitenweise betrachten: lsof | less.

Um beispielsweise herauszufinden, welche Benutzer Ihres Systems gerade mit dem Editor Vim arbeiten, übergeben Sie dem Programm beim Aufruf den Namen des Vim-Binaries (Listing 3)

Listing 3
$ lsof /usr/bin/vim
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
vim 4065 huhnix txt REG 3,10 1411096 647400 /usr/bin/vim
vim 4609 ardbeg mem REG 3,10 1411096 647400 /usr/bin/vim

Äußerst praktisch erweist sich die Spürnase, wenn es darum geht, herauszufinden, welcher Prozess gerade eine Gerätedatei blockiert. Weigert sich das System beispielsweise ein CD-ROM-Laufwerk auszuhängen, schauen Sie mit Lsof einfach nach, welcher Prozess auf die entsprechende Gerätedatei zugreift (Listing 4).

Listing 4
$ lsof /dev/hdc
COMMAND PID  USER   FD  TYPE DEVICE SIZE NODE NAME
kdeinit 4466 huhnix 12r BLK  22,0   2846 /dev/hdc

Jetzt kommt wieder das Ps-Kommando ins Spiel, mit dem Sie ganz genau herausfinden, was sich hinter PID 4466 verbirgt. Dazu setzen Sie neben den bekannten Parametern aux zusätzlich die Option w ein, mit der Sie die Ausgabe verbreitern -- diesen Parameter dürfen Sie mehrmals eingesetzen (Listing 5).

Listing 5
$ ps auxwww | grep 4466
huhnix 4466 0.0 2.4 27972 12572 ? S 11:33 0:00 kdeinit: kio_audiocd
audiocd /tmp/ksocket-huhnix/klauncherz9ZRha.slave-socket /tmp/ksocket-huhnix/konquerorVPZ1va.slave-socket

Der Übeltäter ist offensichtlich ein Konqueror-Fenster, das den Inhalt einer CD anzeigt. Um das Laufwerk freizugeben, reicht es in der Regel aus, das Fenster des Datei-Managers zu schließen, oder den Ordner zu wechseln. Hilft das alles nicht weiter, beenden Sie besonders hartnäckige Prozesse mit dem Programm Kill.

Signal zum Angriff

Mit dem Programm Kill senden Sie Signale an Prozesse. Dazu gehören unter anderem Anweisungen, die eigene Konfigurationsdatei neu einzulesen (SIGHUP), ordnunsgemäß die Arbeit niederzulegen und hinter sich aufzuräumen (SIGTERM) oder auch einfach ohne Rücksicht auf Verluste die Biege zu machen (SIGKILL).

Praktisch sind ebenfalls die Aufforderungen, eine Pause einzulegen (SIGSTOP) und die Arbeit wieder aufzunehmen (SIGCONT). Eine vollständige Liste aller möglichen Signale erhalten Sie über kill -l (Abbildung ((3))). Sämtliche Signale dürfen Sie nur an eigene Prozesse senden -- lediglich der Administrator darf mit den systemweiten Prozessen oder denen anderer Benutzer kommunizieren.

((3)) Die Option -l zeigt eine Liste der möglichen Kill-Signale.

Standardmäßig schickt der einfache Kill-Aufruf das Signal 15 an den Prozess; als weiteres Argument geben Sie die eindeutige PID an: kill 4200. Hilft das alles nichts, und der Prozess taucht weiterhin in der Liste auf, greifen Sie zu drastischeren Mitteln und schicken den Job ins Jenseits.

Das Signal zum Abschuss definieren Sie dabei entweder über seinen numerischen Wert (kill -9 4200) oder über seinen Namen (kill -KILL 4200) -- beachten Sie, dass bei der zweiten Variante die Vorsilbe SIG weglassen. Verscheucht dies den Prozess auch nicht, ist guter Rat oft teuer: Meistens reicht es, auf den Timeout zu warten, in seltenen Fällen verschwindet das Überbleibsel allerdings erst nach dem nächsten Rechnerstart.

Praktisch ist auch das gezielte Anhalten von Tasks (kill -19 pid). Soll die Arbeit weitergehen, schicken Sie an die Prozessnummer die Aufforderung kill -18 pid>. Um beispielsweise eine geänderte Konfiguration eines Super-Daemons, wie Inetd oder Xinetd neu einzulesen, schicken Sie dem Server das Signal HUP:

kill -1 `cat /var/run/inetd.pid`
kill -1 `cat /var/run/xinetd.pid`


Inetd/Xinetd: Dienstprogramme (Daemons) starten oft beim Systemstart und schlummern so lange vor sich hin, bis ein bestimmtes Ereignnis eintritt. Um die Anzahl der wartenden Daemons zu verringern, gibt es die Möglichkeit, Netzwerkdienste über einen so genannten Super-Daemon, wie den Internet Service Daemon (Inetd) oder Extended Internet Service Daemon (Xinetd), zu starten. Diese Superserver überwachen die einzelnen Ports und wecken den benötigten Dienst auf.

Killerkommando

Das Programm Killall versteht dieselben Signale wie sein Kollege Kill, nimmt aber anstelle der Nummer den Namen des Prozesses entgegen. Ohne Spezifikation des Signals geht Killall davon aus, dass Sie -15 (-TERM) senden. So ruft der Befehl killall firefox-bin dazu auf, alle Instanzen des Browsers ordentlich zu beenden.

Da Sie mit Killall wirklich einen Rundumschlag ausführen, ist hier Vorsicht geboten -- das Kommando killall bash beendet alle Instanzen der Bash, inklusive der Shell, in die Sie den Befehl getippt haben. Mit der Option -i gehen Sie daher in den interaktiven Modus und entscheiden für jeden Prozess einzeln, ob dieser ins Jenseits wandert:

$ killall -i xterm
xterm(3838) abbrechen? (y/n) y
xterm(4242) abbrechen? (y/n) n
xterm(4246) abbrechen? (y/n) y
xterm(4250) abbrechen? (y/n) y

Das Killerkommando fragt jetzt unter Angabe der PID nach: Entscheiden Sie selbst für jeden einzelnen Prozess, ob dieser weiterlaufen darf (Druck auf [N]). Geben Sie stattdessen [Y] ein, heißt es: "Time to say goodbye". (agr)

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 | © 2010 Linux New Media AG

[Linux-Magazin] [LinuxUser] [EasyLinux] [Linux-Community] [Ubuntu User] [Linux Technical Review] [Linux Magazine] [Linux Pro Magazine] [Ubuntu User]
[EasyLinux Poland] [Linux Magazine Poland] [Linux Magazine Brasil] [EasyLinux Brasil] [Linux Magazine Spain]