Die Programmeausführung steuern

7.1 Prozesse und Jobs

Ein Prozess ist ein Programm das gerade ausgeführt wird. Jeder Prozess ist durch eine eindeutige PID (process identifier) identifiziert. Um Details zu deinen Prozessen zu sehen tippe.

ps

Ein Prozess kann im Vordergrund (foreground) oder im Hintergrund (background) laufen oder der Prozess kann im Moment unterbrochen (suspended) sein. Im Allgemeinen gibt die Shell den Prompt erst zurück, wenn der aktuelle Prozess abgeschlossen ist.

Einige Prozesse brauchen aber viel Zeit zum Laufen und blockieren so das Terminal. (Typische Beispiele sind Webbrowser oder sonstige graphische Programme wenn du diese aus der Shell startest.) Wenn du einen Prozess in den Hintergrund schickst, bekommst du den Prompt sofort zurück und kannst weitere Jobs starten, während der Job weiter läuft.

Einen Prozess im Hintergrund starten

Um einen Prozess im Hintergrund zu starten, füge ein & am Ende der Befehlszeile an. Als Beispiel verwenden wir den Befehl sleep. sleep wartet eine angegebene Anzahl Sekunden bevor das Programm beendet.

sleep 10

wartet für 10 Sekunden bevor der Prompt zurückkehrt. Während dieser Wartezeit kannst du nichts tun ausser warten.

Um sleep im Hintergrund laufen zu lassen, tippe

sleep 10 &

[1] 6259

Das & startet den Job im Hintergrund und gibt dir den Prompt sofort zurück. Du kannst also weitere Befehle ausführen während du auf das Ende dieses Programms wartest.

Wenn die erste Zeile oben eingetippt wird, erscheint die zweite Zeile in der Shell. Sie gibt dir die Job-Nummer und PID. Die Jobs werden fortlaufen Nummeriert (beginnend mit 1) und die Nummer wird in eckigen Klammern angezeigt, gefolgt von der PID. Sobald der Job beendet, wird dies dem Benutzer durch eine weitere Zeile mitgeteilt.

Einen bestehenden Job in den Hintergrund verschieben

Im Prompt tippe

sleep 100

Dieser Prozess läuft nun im Vordergrund. Du kannst ihn unterbrechen in dem du [control]+[z] drückst (abgekürzt als ^Z). Anschliessend kannst du den unterbrochenen Job im Hintergrund weiterlaufen lassen:

bg

Hinweis: Programme die User-Eingaben erwarten solltest du nicht im Hintergrund laufen lassen.

7.2 Unterbrochene und Hintergrundsprozesse anzeigen

Die Shell führt einen Liste von allen Prozesse die im Moment laufen. Egal ob sie im Vordergrund, im Hintergrund oder unterbrochen sind. Um die Liste anzuzeigen, tippe

jobs

Die Ausgabe könnte dann zum Beispiel so aussehen:

[1] Running kate &
[2]- Running opera &
[3]+ Suspended sleep 100 &

Die Zahl in eckigen Klammern ist die Job-Nummer. Um einen Job in den Vordergrund zu verschieben, tippe

fg %jobnumber

Um zum Beispiel sleep 100, im Vordergrund weiterlaufen zu lassen, tippe

fg %3

Wenn du fg ohne Job-Nummer ausführst, wird der als letztes unterbrochene Prozess im Vordergrund weitergeführt.

7.3 Einen Prozess abschiessen

kill (kill a process)

Es ist manchmal nötig einen Prozess abzuschiessen (zum Beispiel, wenn das Programm in einer Endlosschleife steckt).

Um einen Job zu beenden, der im Vordergrund läuft, tippe ^C (control c). Starte zum Beispiel

sleep 100

und tippe anschliessend ^C

Um einen Prozess abzuschiessen, der im Hintergrund läuft oder unterbrochen ist, tippe

% kill %jobnumber

Ein Beispiel:

sleep 100 & jobs

Angenommen sleep hat die Job-Nummer 4, tippe

kill %4

Kontrolliere, dass der Kill-Befehl funktioniert hat in dem du die Job-Liste wieder anzeigen lässt.

ps (process status)

Eine weitere Möglichkeit einen Job mit kill zu beenden, ist seine Prozess-ID (PID) zu finden. Du verwendest dann kill PID-number

sleep 100 & ps

PID TTY TIME CMD 12731 pts/1 00:00:00 tcsh
12782 pts/1 00:00:00 dbus-launch
12840 pts/1 00:00:00 sleep
12904 pts/1 00:00:00 ps

Um sleep zu beenden, tippe also

kill 12840

kontrolliere den Erfolg anschliessend wieder mit ps

Fall ein Prozess auf das kill-Signal nicht reagiert, kannst du die -9 Option verwenden.

% kill -9 12840

Hinweis: Du kannst nur deine eigenen Prozesse beenden!!!

Hinweis: Auf der graphischen Oberfläche (KDE) kannst du Programme auch mit der Maus zum beenden zwingen: Drücke [Ctrl]+[Alt]+[Esc]. Der Cursor verwandelt sich dann in einen Totenkopf. Wenn du damit auf ein Fenster klickst, wird das entsprechende Programm abgeschossen.

Zusammenfassung

command & startet command im Hintergrund
^C schiesst den Job ab, der gerade im Vordergrund läuft
^Z unterbricht den Job, der gerade im Vordergrund läuft
bg schickt den als letztes unterbrochenen Job in den Hintergrund
jobs zeigt eine Liste aller jobs
fg %1 schickt Job Nummer 1 in den Vordergrund
kill %1 schiesst Job Nummer 1 ab
ps zeigt eine Liste der Prozesse
kill 12840 schiesst Process Nummer 12840 ab