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.