11.3 ps


Sie wissen also jetzt wie man zwischen mehreren Prozessen, die Sie von der Befehlszeile gestartet haben, hin und herschaltet. Und Sie wissen auch das immer eine Menge Prozesse laufen. Wie listen Sie aber all diese Programme auf? Nun, sie machen Gebrauch vom ps(1) Befehl. Dieser Befehl hat viele Optionen, also behandeln wir hier nur die wichtigsten. Schauen Sie für die komplette Auflistung in die man Page zu ps. Man Pages werden tiefergehend in Abschnitt 2.1.1 behandelt.

Einfaches Tippen von ps wird Ihnen eine Liste der Programme geben, die auf Ihrem Terminal laufen. Diese enthält die Vordergrundprozesse (inklusive der Shell die Sie nutzen und natürlich ps selber). Es werden auch möglicherweise laufende Hintergrundprozesse aufgelistet. Meistens wird das eine sehr kurze Auflistung:

Darstellung 11-1. Einfache ps Ausgabe

% ps
   PID TTY          TIME CMD
  7923 ttyp0    00:00:00 bash
  8059 ttyp0    00:00:00 ps


Obwohl das nicht viele Prozesse sind ist diese Information sehr eindeutig. Sie bekommen die gleichen Spalten beim einfachen Aufruf von ps unabhängig davon wie viele Prozesse laufen. Was bedeute sie alle?

Nun, die PID ist die Prozess ID. Allen laufenden Prozessen wird eine eindeutige Identifizierung zwischen 1 und 32767 gegeben. Jeder Prozess wird der nächsten freien PID zugewiesen. Wenn ein Prozess abgeschlossen ist (oder abgebrochen wird, was Sie im nächsten Abschnitt sehen) gibt er seine PID auf. Wenn die maximale PID erreicht wird, dann ist "nächste freie" gleichbedeutend mit "niedrigste freie".

Die TTY Spalte gibt an auf welchem Terminal der Prozess läuft. Ein einfaches ps wird nur die Programme auf dem aktuellen Terminal auflisten, also haben alle Prozesse die gleiche Information in der TTY Spalte. Wie Sie sehen können laufen beide aufgelisteten Prozesse auf ttyp0. Diese zeigt das diese entweder aus der Entfernung oder von irgendeinem X Terminal gestartet wurden.

Die TIME Spalte gibt an wie viel CPU Zeit der Prozess verbraucht hat. Diese unterscheidet sich von der Zeit die der Prozess insgesamt gelaufen ist. Erinnern Sie sich daran das Linux ein multitasking Betriebssystem ist. Es laufen die ganze Zeit viele Prozesse und jeder dieser Prozesse bekommt einen kleinen Teil der Zeit des Prozessors. Deshalb sollte die TIME Spalte wesentlich weniger Zeit für jeden Prozess anzeigen als dieser tatsächlich zum Laufen benötigt. Wenn Sie mehr als einige Minuten in der TIME Spalte sehen, dann könnte das bedeuten das etwas falsch läuft.

Letztendlich zeigt die CMD Spalte um was es sich bei dem Programm handelt. Sie listet nur den grundlegenden Namen des Programms, nicht eine Befehlszeilen-Option oder ähnliche Information. Um diese Information zu bekommen müssen Sie eine der vielen Optionen für ps verwenden. Wir werden das in kürze diskutieren.

Sie können eine komplette Liste der Prozesse, welche auf Ihrem System laufen, mit der richtigen Kombination von Optionen erhalten. Dies wird wahrscheinlich in einer langen Auflistung von Prozessen enden (fünfundfünfzig auf dem Laptop auf dem ich diesen Satz schreibe) also kürze ich die Ausgabe:

% ps -ax
 PID TTY      STAT   TIME COMMAND
   1 ?        S      0:03 init [3]
   2 ?        SW     0:13 [kflushd]
   3 ?        SW     0:14 [kupdate]
   4 ?        SW     0:00 [kpiod]
   5 ?        SW     0:17 [kswapd]
  11 ?        S      0:00 /sbin/kerneld
  30 ?        SW     0:01 [cardmgr]
  50 ?        S      0:00 /sbin/rpc.portmap
  54 ?        S      0:00 /usr/sbin/syslogd
  57 ?        S      0:00 /usr/sbin/klogd -c 3
  59 ?        S      0:00 /usr/sbin/inetd
  61 ?        S      0:04 /usr/local/sbin/sshd
  63 ?        S      0:00 /usr/sbin/rpc.mountd
  65 ?        S      0:00 /usr/sbin/rpc.nfsd
  67 ?        S      0:00 /usr/sbin/crond -l10
  69 ?        S      0:00 /usr/sbin/atd -b 15 -l 1
  77 ?        S      0:00 /usr/sbin/apmd
  79 ?        S      0:01 gpm -m /dev/mouse -t ps2
  94 ?        S      0:00 /usr/sbin/automount /auto file /etc/auto.misc
 106 tty1     S      0:08 -bash
 108 tty3     SW     0:00 [agetty]
 109 tty4     SW     0:00 [agetty]
 110 tty5     SW     0:00 [agetty]
 111 tty6     SW     0:00 [agetty]
 [Ausgabe abgeschnitten]


Viele dieser Prozesse werden während dem Booten des Systems gestartet. Ich habe einiges an meinem System angepasst, also wird die Länge Ihrer Auflistung mit großer Wahrscheinlichkeit abweichen. Dennoch werden Sie die meisten dieser Prozesse auch auf Ihrem System sehen. Wie Sie sehen zeigen diese Optionen die Befehlszeilen-Optionen für die laufenden Prozesse an. Kürzlich hat eine Kernel-Sicherheitslücke in ptrace zu einer Anpassung geführt, durch die Befehlszeilen-Optionen für viele laufende Prozesse nicht mehr angezeigt werden. Diese werden nun, wie die PIDs 108 bis 110, in Klammern gelistet. Es bringt auch einige weitere Spalten und weitere interessante Angaben.

Als erstes fällt auf das die meisten dieser Prozesse auf tty "?" gelistet werden. Diese sind nicht mit irgendeinem bestimmten Terminal verbunden. Dies ist üblich für Daemons, welches Prozesse sind, die laufen ohne sich mit irgendeinem bestimmten Terminal zu verbinden. Übliche Daemons sind sendmail, BIND, apache und NFS. Diese lauschen üblicherweise auf eine Anfrage eines Clients und geben auf Anfrage Informationen zurück.

Zweitens ist da eine neue Spalte: STAT. Sie zeigt den Status des Prozesses an. S steht für schlafen: der Prozess wartet darauf das etwas passiert. Z steht für "zum Zombie gewordener Prozess". Ein zum Zombie gewordener Prozess ist einer dessen Elternprozess beendet wurde und den Kindprozess zurückgelassen hat. Das ist keine gute Sache. D steht für einen Prozess der in einen nicht abbrechbaren Schlaf gekommen ist. Oft verweigern diese Prozesse auch dann den Abbruch wenn ein SIGKILL abgesetzt wird. Sie können später im nächsten Abschnitt über kill mehr über SIGKILL lesen. W steht für ausgebend. Ein abgebrochener Prozess wird mit einem X markiert. Ein Prozess der mit T markiert ist wird beobachtet oder ist gestoppt. R bedeutet das der Prozess gestartet werden kann.

Wenn Sie noch mehr Informationen über die laufenden Prozesse wollen, versuchen Sie dies:

% ps -aux
 USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
 root         1  0.0  0.0   344   80 ?        S    Mar02   0:03 init [3]
 root         2  0.0  0.0     0    0 ?        SW   Mar02   0:13 [kflushd]
 root         3  0.0  0.0     0    0 ?        SW   Mar02   0:14 [kupdate]
 root         4  0.0  0.0     0    0 ?        SW   Mar02   0:00 [kpiod]
 root         5  0.0  0.0     0    0 ?        SW   Mar02   0:17 [kswapd]
 root        11  0.0  0.0  1044   44 ?        S    Mar02   0:00 /sbin/kerneld
 root        30  0.0  0.0  1160    0 ?        SW   Mar02   0:01 [cardmgr]
 bin         50  0.0  0.0  1076  120 ?        S    Mar02   0:00 /sbin/rpc.port
 root        54  0.0  0.1  1360  192 ?        S    Mar02   0:00 /usr/sbin/sysl
 root        57  0.0  0.1  1276  152 ?        S    Mar02   0:00 /usr/sbin/klog
 root        59  0.0  0.0  1332   60 ?        S    Mar02   0:00 /usr/sbin/inet
 root        61  0.0  0.2  1540  312 ?        S    Mar02   0:04 /usr/local/sbi
 root        63  0.0  0.0  1796   72 ?        S    Mar02   0:00 /usr/sbin/rpc.
 root        65  0.0  0.0  1812   68 ?        S    Mar02   0:00 /usr/sbin/rpc.
 root        67  0.0  0.2  1172  260 ?        S    Mar02   0:00 /usr/sbin/cron
 root        77  0.0  0.2  1048  316 ?        S    Mar02   0:00 /usr/sbin/apmd
 root        79  0.0  0.1  1100  152 ?        S    Mar02   0:01 gpm
 root        94  0.0  0.2  1396  280 ?        S    Mar02   0:00 /usr/sbin/auto
 chris      106  0.0  0.5  1820  680 tty1     S    Mar02   0:08 -bash
 root       108  0.0  0.0  1048    0 tty3     SW   Mar02   0:00 [agetty]
 root       109  0.0  0.0  1048    0 tty4     SW   Mar02   0:00 [agetty]
 root       110  0.0  0.0  1048    0 tty5     SW   Mar02   0:00 [agetty]
 root       111  0.0  0.0  1048    0 tty6     SW   Mar02   0:00 [agetty]
 [Ausgabe abgeschnitten]


Das ist eine ganze Menge Information. Im Wesentlichen enthält es Informationen darüber welcher Benutzer den Prozess gestartet hat, wie viele Systemressourcen der Prozess nutzt (die %CPU, %MEM, VSZ und RSS Spalten) und zu welchem Datum der Prozess gestartet wurde. Obwohl das eine ganze Menge Information ist, könnte das praktisch für einen Administrator sein. Dies bringt uns auch zu einem anderen Punkt: Die Information geht nun über das Ende des Bildschirms so dass Sie sie nicht ganz sehen können. Die -w Option zwingt ps dazu lange Zeilen umzubrechen.

Das ganze sieht nicht besonders hübsch aus, aber es tut seinen Job. Sie haben nun die komplette Auflistung für jeden Prozess bekommen. Es gibt noch viel mehr Information die Sie für jeden Prozess angezeigen können. Lesen Sie die sehr ausführliche man Page zu ps. Jedoch sind die oben gezeigten Optionen die bekanntesten und werden diejenigen sein die Sie am meisten benutzen werden.
There are no comments on this page.
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki