Natürlich bietet Unix diverse Befehle an, die das Prozeß-System betreffen. Die wichtigsten sind hier kurz erklärt:

1 Befehle zum Auflisten der laufenden Prozesse

1.1 ps

Um alle Prozesse aufzulisten, die gerade laufen, gibt es den Befehl ps (Process-Status), der zunächst mal nur die eigenen Prozesse auflistet. ps stellt aber immer nur eine Momentaufnahme dar, d.h., es werden genau die Prozesse aufgelistet, die im Augenblick laufen. Dynamische Veränderungen sind nicht darstellbar.

ps kennt eine ganze Menge verschiedener Kommandozeilenparameter (Schalter) die sein Verhalten entsprechend ändern können. Die wichtigsten sind:

 l Langes Format
uUser Format (Mit User und Startzeit)
aAlle Prozesse, auch die anderer User
xAuch Daemon-Prozesse (Ohne eigene TTY-Leitung)
fForest (Wald) Format – Der Prozessbaum wird dargestellt
wWide (breite) Ausgabe – Zeilen werden nicht abgeschnitten

So kann also mit dem Befehl

ps uax

eine Liste aller Prozesse ausgegeben werden, die insgesamt auf dem System laufen, auch die anderer User (a) und Daemonprozesse (x). Sie werden zusammen mit dem Namen ihres Eigentümers (u) dargestellt.

Um das gleiche Ergebnis als Baumstruktur zu bekommen kann

ps fax

benutzt werden. Die einzelnen Felder sind identisch mit den weiter unten dargestellten Feldern des top-Befehls.

1.2 top

Wenn statt der Auflistung der Momentaufnahme eine ständig aktualisierte Liste gewünscht wird, so ist das Programm top das benötigte Werkzeug. Dieses Programm gibt eine Liste der Prozesse aus und aktualisiert diese nach einer bestimmten Wartezeit (voreingestellt sind 5 Sek). Der Nachteil ist, dass nur soviele Prozesse aufgelistet werden, wie auf den entsprechenden Bildschirm passen. Eine vernünftige Anwendung ist somit nur in einem entsprechend großem xterm-Fenster möglich.

Als Programm, das interaktiv benutzbar ist, hat top natürlich auch Befehlstasten, die den Ablauf verändern. Die folgenden Tasten sind die wichtigsten Befehle:

LeertasteSofortiges Update der Prozesse
Strg-LBildschirm neu aufbauen
h oder ?Darstellung einer Hilfeseite
iIgnoriere schlafende und Zombie-Prozesse (i ist ein Wechselschalter, erneutes Drücken bewirkt, dass diese Prozesse wieder angezeigt werden.
rRenice – Damit kann einem Prozeß ein neuer Nice-Wert gegeben werden (sofern der User das Recht dazu hat). Das Programm fragt nach PID und Nice-Wert.
kKill – Entspricht dem Programm kill – siehe weiter unten. Damit können Signale an Prozesse geschickt werden.
sDamit kann die Zeit verändert werden, die zwischen dem Auffrischen des Bildschirms gewartet wird. Eingabe in Sekunden. Vorsicht, eine zu kurze Zeit bringt den Rechner schnell in die Knie. Eine 0 steht für dauernde Neudarstellung ohne Wartezeit, Voreingestellt sin meist 5 Sekunden.
fFügt Felder in die Ausgabe ein oder entfernt sie. Die einzelnen Felder werden weiter unten erklärt.
WSchreibt die aktuelle Konfiguration in die Datei ~/.toprc – Damit wird nach dem Neustart von top diese Konfiguration wieder geladen.
qQuit – Beendet das Programm

top kann verschiedene Felder darstellen, die mit dem f-Befehl ausgewählt werden können. Die einzelnen Felder haben folgende Bedeutung:

PIDDie Process-ID des Prozesses
PPIDDie Parent Process ID des Prozesses
UIDDie User ID des Users, dem der Prozeß gehört
USERDer Username des Users, dem der Prozeß gehört
PRIDie Priorität des Prozesses. Höhere Werte bedeuten höhere Priorität.
NIDer Nice-Wert des Prozesses. Höhere Werte bedeuten geringere Priorität.
SIZEDie Größe des Codes plus Daten plus Stack in KiloByte
TSIZEDie Größe des Codes in KiloByte. ELF Prozesse werden nicht korrekt dargestellt
DSIZEDie Größe der Daten und Stack in Kilobyte. ELF Prozesse werden nicht korrekt dargestellt
TRSText Resident Size – Die größe des residenten Code-Blocks in KiloByte
SWAPGröße des ausgelagerten Bereichs des Tasks
DGröße der als Dirty markierten Speicherseiten
LIBGröße der Library-Speicherseiten – Funktioniert nicht bei ELF-Prozessen.
RSSDie Größe des physikalische Speichers, den das Programm benutzt. Für ELF-Format werden hier auch die Libraries mitgezählt, bei a.out Format nicht.
SHAREDie Größe der benutzten Shared-Libraries des Prozesses.
STATDer Status des Prozesses. Das kann entweder ein S für schlafend, D für ununterbrechbar schlafend (dead), R für laufend (running) oder T für angehalten (traced). Dieser Angabe kann noch ein < für einen negativen Nice-Wert, ein N für einen positiven Nice-Wert oder ein W für einen ausgelagerten Prozeß folgen. (Das W funktioniert nicht richtig für Kernel-Prozesse)
WCHANDie Kernelfunktion, die der Task gerade nutzt.
TIMEDie gesamte CPU-Zeit, die der Prozeß verbraucht hat, seit er gestartet wurde.
%CPUDie CPU-Zeit, die der Prozeß seit dem letzten Bildschirm-Update verbraucht hat, dargestellt als Prozentsatz der gesamten CPU-Zeit.
%MEMDer Anteil des Speichers, den der Task nutzt.
COMMANDDas Kommando, mit dem der Prozeß gestartet wurde.
TTYDie Terminalleitung des Prozesses.

2 Befehle für die Inter-Process-Communikation

Die folgenden Befehle, die alle Signale an Prozesse schicken sind in ihrer Handhabung für den Normaluser eingeschränkt. Der Normaluser darf selbstverständlich nur die Prozesse ansprechen, die ihm gehören, die er also selbst aufgerufen hat. Nur der Systemverwalter (root) darf auch Prozessen anderer User solche Signale schicken.

2.1 kill

Mit dem kill-Befehl kan man einem oder mehreren Prozessen Signale schicken. Diese Signale können den Prozeß dann dazu bewegen, bestimmte Aktionen vorzunehmen. Der Befehl kill erwartet als Parameter zuerst das zu sendende Signal (mit vorgestelltem Bindestrich), entweder als Zahl oder als symbolischer Name, dann die PID des Prozesses, dem es geschickt werden soll. Es können auch mehrere Prozeß IDs angegeben werden.

Mit kill -l erhält man eine Liste der gültigen Signale, bei Linux sind das in der Regel die Folgenden:

  1) SIGHUP  2) SIGINT  3) SIGQUIT  4) SIGILL
  5) SIGTRAP  6) SIGABRT  7) SIGBUS  8) SIGFPE
  9) SIGKILL10) SIGUSR111) SIGSEGV12) SIGUSR2
13) SIGPIPE14) SIGALRM15) SIGTERM17) SIGCHLD
18) SIGCONT19) SIGSTOP20) SIGTSTP21) SIGTTIN
22) SIGTTOU23) SIGURG24) SIGXCPU25) SIGXFSZ
26) SIGVTALRM27) SIGPROF28) SIGWINCH29) SIGIO
30) SIGPWR   

Diese Signale haben, bis auf das Signal Nr. 9 (SIGKILL) und 15 (SIGTERM), keine festgelegte Bedeutung. Der Programmierer eines Programms kann festlegen, wie das Programm auf ein bestimmtes Signal reagieren soll. Das Signal 15 ist das voreingestellte Signal, das geschickt wird, wenn dem kill-Befehl kein Signal angegeben wird und fordert ein Programm auf, sich zu beenden. Ein Prozeß muß aber nicht zwangsläufig abbrechen, wenn es dieses Signal empfängt. Das Signal 9 hingegen ist der „Todesschuß“, diesem Signal kann sich kein Prozeß entziehen.

2.2 skill

Der Befehl skill arbeitet im wesentlichen wie kill, nur dass er sich nicht auf Prozeß-IDs bezieht, sondern auf Namen von Programmen, Usern oder TTY-Leitungen. Das heißt, skill schickt ein bestimmtes Signal an alle Programme eines Namens, alle Prozesse eines Users oder alle Prozesse, die ein bestimmtes Terminal benutzen. Die Aufrufform ist wie bei kill, zunächst das Signal, wie bei kill mit vorgestelltem Bindestrich, entweder als symbolischer Name (z.B. -HUP oder -SIGHUP) oder als Nummer (-1). Dann folgen aber nicht PIDs sondern die Namen der Programme, User oder TTYs. Der Befehl

skill -9  hans

schickt also allen Prozessen, die dem User hans gehören das tödliche Signal Nummer 9. Oder um alle Prozesse zu beenden, die auf der Terminalleitung TTY4 laufen, reicht es zu schreiben:

skill -9  TTY4

Das hat natürlich den Haken, dass es z.B. Programme geben kann, die den gleichen Namen wie User tragen. Um also Verwechslungen auszuschließen, kann dem Usernamen ein -u vorgestellt werden, dem Programmnamen ein -c (command), einer PID ein -p und dem Namen der Terminalleitung ein -t. Diese Angaben sind kombinierbar.

Um sicherzustellen, dass es in den beiden obigen Beispielen nicht zu Verwechslungen kommen kann wäre es also besser zu schreiben:

skill -9 -u  hans
skill -9 -t  TTY4

2.3 snice

Der Befehl snice ist nah verwandt mit skill, nur dass er statt ein Signal an Prozesse eines Users, eines Namens oder einer TTY-Leitung eben deren Nice-Wert ändert. Wie früher schon erklärt ist der Nice-Wert eines Prozesses der Wert, wie nett ein Prozeß zu anderen Prozessen ist, wie viel Rechenzeit er also benutzt. Je höher der Wert, umso niedriger die Priorität. Nur der Systemverwalter darf einem Prozeß einen negativen Nice-Wert geben.

Der Befehl

snice +10 -p 1034

stellt den Nice-Wert des Prozesses mit der PID 1034 auf +10 ein.

2.4 killproc

Der Befehl killproc schickt, ähnlich wie skill, Signale an Prozesse, aber er schickt sie an alle Prozesse, die von genau einem Programm abstammen. Als zweiten Parameter erwartet er also den vollen Pfad zu einem Programm, und schickt dann das angegebene Signal an alle Prozesse, die dieses Programm laufen lassen. Er entspricht damit fast dem Befehl

skill -SIGNAL -c  Programmname

mit dem Unterschied, dass skill sich hier nur um den Namen kümmert, nicht um den Pfad. Wären also im System zwei Programme gleichen Namens, eines heißt /home/hans/prog1, das andere /home/otto/prog1, beide Programme sind gerade geladen und laufen, so würde ein

skill -9 -c  prog1

beide Prozesse killen. Der Befehl

killproc -9  /home/hans/prog1

schickt aber das Signal 9 nur an das eine von beiden.

Schreibe einen Kommentar