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.
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.
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.
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.
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.
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.
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 |