Betriebssystem Linux
Befehle für das Prozeß-System
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 u User Format (Mit User und Startzeit) a Alle Prozesse, auch die anderer User x Auch Daemon-Prozesse (Ohne eigene TTY-Leitung) f Forest (Wald) Format - Der Prozessbaum wird dargestellt w Wide (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:
Leertaste Sofortiges Update der Prozesse Strg-L Bildschirm neu aufbauen h oder ? Darstellung einer Hilfeseite i Ignoriere schlafende und Zombie-Prozesse (i ist ein Wechselschalter, erneutes Drücken bewirkt, dass diese Prozesse wieder angezeigt werden. r Renice - 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. k Kill - Entspricht dem Programm kill - siehe weiter unten. Damit können Signale an Prozesse geschickt werden. s Damit 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. f Fügt Felder in die Ausgabe ein oder entfernt sie. Die einzelnen Felder werden weiter unten erklärt. W Schreibt die aktuelle Konfiguration in die Datei ~/.toprc - Damit wird nach dem Neustart von top diese Konfiguration wieder geladen. q Quit - Beendet das Programm top kann verschiedene Felder darstellen, die mit dem f-Befehl ausgewählt werden können. Die einzelnen Felder haben folgende Bedeutung:
PID Die Process-ID des Prozesses PPID Die Parent Process ID des Prozesses UID Die User ID des Users, dem der Prozeß gehört USER Der Username des Users, dem der Prozeß gehört PRI Die Priorität des Prozesses. Höhere Werte bedeuten höhere Priorität. NI Der Nice-Wert des Prozesses. Höhere Werte bedeuten geringere Priorität. SIZE Die Größe des Codes plus Daten plus Stack in KiloByte TSIZE Die Größe des Codes in KiloByte. ELF Prozesse werden nicht korrekt dargestellt DSIZE Die Größe der Daten und Stack in Kilobyte. ELF Prozesse werden nicht korrekt dargestellt TRS Text Resident Size - Die größe des residenten Code-Blocks in KiloByte SWAP Größe des ausgelagerten Bereichs des Tasks D Größe der als Dirty markierten Speicherseiten LIB Größe der Library-Speicherseiten - Funktioniert nicht bei ELF-Prozessen. RSS Die 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. SHARE Die Größe der benutzten Shared-Libraries des Prozesses. STAT Der 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) WCHAN Die Kernelfunktion, die der Task gerade nutzt. TIME Die gesamte CPU-Zeit, die der Prozeß verbraucht hat, seit er gestartet wurde. %CPU Die CPU-Zeit, die der Prozeß seit dem letzten Bildschirm-Update verbraucht hat, dargestellt als Prozentsatz der gesamten CPU-Zeit. %MEM Der Anteil des Speichers, den der Task nutzt. COMMAND Das Kommando, mit dem der Prozeß gestartet wurde. TTY Die 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) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) 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 Befehlskill -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 Befehlskill -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.
[ Kurs Hauptseite ] [ Linux-Kurse ] [ Startseite Linux-Praxis ] © 1999, 2000, 2001 by F. Kalhammer