Sie haben mittlerweile sicher bemerkt, dass Sie nach der Eingabe eines Befehls im Terminal normalerweise warten müssen, bis der Befehl seine Arbeit vollendet hat, ehe Sie wieder Kontrolle über die shell bekommen. Das ist der Fall, wenn Sie, wie bisher, Ihre Befehle im Vordergrund laufen lassen. Es gibt jedoch Situationen, in denen das nicht wünschenswert ist.
Nehmen wir an, Sie wollen ein umfangreiches Verzeichnis rekursiv in ein anderes Verzeichnis kopieren. Sie wollen dabei keine Fehlermeldungen sehen, also leiten Sie die Fehler um nach /dev/null:
cp -R images/ /shared/ 2>/dev/null |
Solch ein Befehl kann schon einmal einige Minuten für die Ausführung benötigen, Zeit, die Sie gerade nicht zur Verfügung haben. Nun haben Sie zwei Möglichkeiten: die erste ist ziemlich rigoros. Sie stoppen den Prozess und starten ihn aufs Neue, wenn Sie mehr Zeit dafür haben. Dafür genügt ein einfaches Strg+c: damit wird der Prozess beendet und Sie haben Ihre Eingabeaufforderung wieder zur Verfügung. Aber halt! Tun Sie das nicht sondern lesen Sie erstmal weiter.
Warum lassen Sie nicht einfach den Prozess weiterlaufen während Sie etwas Anderes machen?. Die Lösung: Sie stellen den Prozess in den Hintergrund. Geben Sie dazu Strg+z ein, um den Prozess auszusetzen:
$ cp -R images/ /shared/ 2>/dev/null # Jetzt geben Sie Strg-z ein [1]+ Stopped cp -R images/ /shared/ 2>/dev/null $ |
und Sie befinden sich wieder am Prompt. Der Prozess pausiert und wartet darauf, wieder gestartet zu werden (daher das Wort Stopped in der Ausgabe). Das wollen Sie ja auch, allerdings im Hintergrund. Geben Sie bg ein (für BackGround) und Sie erhalten das gewünschte Resultat:
$ bg [1]+ cp -R images/ /shared/ 2>/dev/null & $ |
Der Prozess läuft als Hintergrund-Job weiter, wie das & (Et-Zeichen, engl.Ampersand) am Ende der Zeile anzeigt. Sie können nun mit anderen Befehlen an der Eingabeaufforderung weiterarbeiten. Ein Prozess, der im Hintergrund läuft, wird Hintergrundprozess (engl. Background Job) genannt.
Natürlich können Sie Prozesse direkt als Hintergrundprozesse starten, indem Sie am Ende der Befehlssequenz das Et-Zeichen (&) anfügen. Für unser Beispiel sieht das so aus:
cp -R images/ /shared/ 2>/dev/null & |
Durch die Eingabe von fg (engl. ForeGround) holen Sie den Prozess wieder in den Vordergrund. Um ihn dann wieder in den Hintergeund zu stellen, geben Sie wieder zuerst Strg+z und dann bg ein.
Sie können auf diese Weise mehrere Jobs hintereinander starten, jeder Befehl bekommt dann eine Jobnummer. Der shell-Befehl jobs listet alle gerade in dieser aktuellen shell laufenden Jobs auf. Dabei steht vor dem zuletzt in den Hintergrund gestellten Job ein +. Um einen bestimmten Job in den Vordergrund zu holen, geben Sie fg <n> ein, wobei <n> die Jobnummer ist, also beispielsweise fg 5.
Bedenken Sie, dass Sie natürlich auf diese Art auch Vollbild-Programme wie z.B. less oder einen Texteditor wie Vi im Hintergrund starten und sie bei Bedarf in den Vordergrund holen können.