| |
|
|
| |

Job Control
Mehre kurze Kommandos, die alle irgendwie zusammenhängen.
Wenn du:
ps ax
(ps steht für "process status")
machst, siehst du alle Programme, die momentan gerade auf deinem Compi
laufen. D.h. manche davon laufen nicht, die schlafen (die haben ein S für
sleeping). Man nennt diese laufenden (und schlafenden) Programme:
"prozesse" oder manchmal auch "jobs"). Jeder dieser Jobs hat eine Nummer,
die ihn identifiziert (die steht in der ps-Ausgabe an erster Stelle)
Ein andere Befehl, um sich die aktuell laufenden Prozesse anzusehen ist:
top
top deshalb, weil er die Prozesse geordnet nach CPU-Zeitverbrauch ordnet.
(Man kann auch nach Speicherverbrauch ordnen, wenn man in top groß M
drückt)
Die Anzeige wird solange periodisch upgedated, bis man
q
drückt, um das Programm zu beenden.
Die erste Spalte ist wieder die Nummer des Prozesses (auch PID genannt). Die
ganz oberste Zeile zeigt dir dieselbe Ausgabe wie der Befehl
uptime
an, die 3 Werte hinter "load average" ist die gemittelte Anzahl an Prozessen
die gleichzeitig laufen wollen. Und zwar über 1 bzw 5 bzw 15 Minuten
gemittelt. Ein "load average" von 1 heisst also, dass im Durchschnitt
ständig 1 Prozess laufen will. D.h. dein Compi ist zu 100% ausgelastet.
Wenn du einen "load average" von z.B. 3 hast, dann sind 3 Prozesse, die alle
gleichzeitig laufen wollen. Dein Compi ist auch zu 100% ausgelastet, aber
jeder der Prozesse bekommt nur ein Drittel der Zeit, die er gerne haben
würde. Üblicherweise sollte der "load average" unter 1 sein..
Wenn dein Compi also aus irgendeinem Grunde seltsam langsam zu reagieren
scheint, lohnt sich meist ein Aufruf von top, um zu sehen, wer denn da soviel
CPU-Zeit verbraucht. (meist ein hängengebliebenes Netscape)
Um das Programm zu beenden, kannst du den "kill" Befehl benutzen:
kill 1234
würde den Prozess mit der Nummer 1234 killen, in dem ihm mitgeteilt wird,
dass er sich gefälligst beenden soll. Wenn sich der Prozess aber wirklich
aufgehängt hat, ignoriert er das kill eventuell. Dann kann man noch den
"Holzhammer" verwenden:
kill -9 1234
sollte dann funktionieren.
Wenn du zum "Üben" fürs "killen" ein Programm haben willst, das lange
rechnet und viel CPU braucht kannst du ja z.b:
echo 123456^123456 | bc &
eintippen. Das würde dem Programm "bc" sagen, es soll 123456123456
ausrechnen. Die Zahl, die da rauskommt, hat ja doch einige hunderdtausend
Stellen.
Notfalls kannst du auch alle bc killen mit:
killall bc
so. Mehr über Job Control ein ander mal..
Wollen wir nur ein Programm, das lange braucht, aber keine CPU-Zeit
verbrät, dann koennen wir auch
sleep 1000 &
verwenden. Das macht nichts anderes, als 1000 Sekunden zu "schlafen".
Auch die bash bietet uns einige Möglichkeiten, um mit Jobs umzugehen.
Das & am Ende einer Zeile sagt der Shell, dass dieser Prozess im
Hintergrund laufen soll, um nicht unsere aktuelle Shell zu blockieren.
(Ansonsten müsstest du 1000 Sekunden warten, bis du wieder einen Shell-
Prompt (Eingabeaufforderung) bekommst)
Bemerkt man erst mit der Zeit, dass man einen Prozess gerne im Hintergrund
haben würde dann kann man das mit Control-Z machen.
Das "stoppt" den Prozess. Er lauft nicht, aber er kann wieder reaktiviert
werden. Und zwar mit dem shell Befehl:
bg
(für Background). Das reaktiviert den letzten gestoppten Befehl und
schickt ihn in den Hintergrund. Er läuft dann so, als wäre er mit
& am Ende gestartet worden.
Alternativ kann man
fg
(foreground) verwenden, um den gestoppten Prozess im Vordergrund
weiterzuführen.. (Nur wenn der Prozess im Vordergrund läuft, kann man
auch Eingaben dorthin machen).
der bash Befehl
jobs
zeigt alle gerade von dieser Shell aus kontrollierten Jobs an. Die Nummer
in Klammer kann man beim kill verwenden um den prozess anzusprechen
(anstatt seiner echten Prozessnummer.)
also z.b:
sleep 100 &
kill %1
würde genau diesen Befehl killen.
Befehle, die man gerne in den Hintergrund schickt, sind welche die ohnehin
keine Ausgabe auf dem Terminal machen, sondern die grafische X11
Oberfläche verwenden. z.b.:
xterm &
oder:
netscape &
EXERCISES:
Starte ein:
sleep 1000
Benutze ^z und fg und bg um diesen Befehl in den Vordergrund und in den
Hintergrund zu schicken. Schau dir die Ausgabe von "jobs" an.
Schau dir die Ausgabe von ps und top an.
Versuche einen von dir gestarteten sleep Befehl auf verschiedenste Arten
zu killen.
REFERENCES:
man ps
ps --help
man top
man kill
help kill
kill --help
help fg
help bg
help jobs
|
|
| |
|
|
|