Unter Jobkontrolle versteht man nun, wie man mit der Shell mehrere Prozesse kontrolliert, die gleichzeitig laufen (bzw. nicht laufen, weil sie gestoppt sind).
Dazu drückt man die Tastenkombination CONTROL-Z. Damit wird dem Prozeß das Signal STOP geschickt, das Betriebssystem stellt die Bearbeitung des Prozesses vorerst ein, und man kann mit der Shell normal an etwas anderem weiterarbeiten.
Der Prozeß ist jedoch nicht gestorben. Man kann ihn jederzeit wieder weiterlaufen lassen. Dazu schickt man ihm das Signal CONT, wozu die Shell die komfortableren Kommandos fg und bg anbietet (siehe nächste Abschnitte).
Man kann auf diese Weise nicht nur einen, sondern beliebig viele Prozesse hintereinander suspendieren. Die Shell merkt sich jeden dieser angehaltenen Prozesse in einer Liste, deren Inhalt man sich mit dem Kommando jobs ansehen kann.
Diese Liste hat vier Spalten:
Mit dem Kommando fg %nr holt man einen gestoppten Prozeß wieder in den Vordergrund. "nr" ist dabei die Jobnummer aus der Jobliste (die man mit jobs erhält). Für den aktuellen, d.h. zuletzt gestoppten Prozeß kann man die Nummernangabe weglassen.
Nicht verwechseln darf man die Nummer übrigens mit der Prozeß- Nummer, die das Betriebssystem vergibt. Zur Unterscheidung wird allen Jobnummern immer ein %-Zeichen vorangestellt.
Mit dem Kommando bg %nr läßt man einen Prozeß im Hintergrund weiterlaufen. Die Shell gibt dann nur Jobnummer und Kommandonamen aus, und ist wieder Eingabebereit.
Ein Prozeß, der im Vordergrund läuft hat die volle Aufmerksamkeit der Shell, d.h. sie wartet auf seine Beendigung - keine Kommandoeingaben sind solange möglich - und leitet alle Tastatureingaben an den Prozeß weiter (mit Ausnahme von CONTROL-C und ähnlichem).
Läßt man einen Prozeß dagegen im Hintergrund laufen, so kümmert sich die Shell, wenn sie ihn einmal gestartet hat nicht mehr besonders um ihn: sie zeigt sofort wieder einen Kommandoprompt an und wartet auf neue Kommandoeingaben.
Der Prozeß steht allerdings noch in der Job-Liste mit dem Status Running. Man kann ihn mit dem Kommando fg %nr unter Angabe seiner Jobnummer wieder in den Vordergrund holen.
Wenn ein Prozeß im Hintergrund stirbt, teilt die Shell dies vor der Anzeige des nächsten Kommandopromptes mit. Wenn man auf das Ende eines Prozesses im Hintergrund wartet, sollte man also ab und zu die RETURN-Taste drücken, damit die Shell einen vom Tod auch unterrichtet.
Man kann keinen Prozeß, der Eingaben von der Tastatur lesen will im Hintergrund laufen lassen. Denn die Tastatur hat ja schon die Shell (oder ein anderer gestarteter Prozeß). Deshalb wird ein Hintergrundprozeß automatisch suspendiert, wenn er von der Tastatur lesen möchte. Man kann allerdings die Eingabe umleiten, so daß der Prozeß anstatt von der Console die Zeichen aus einer Datei liest.
Schreibt man an das Ende einer Kommandozeile das Ampersandzeichen & (kaufmännisches Und), so wird der Prozeß direkt im Hintergrund gestartet. Beispiel:
mcopy a:/test test.dos &
Die Shell läßt sich nicht einfach mit exit beenden, solange noch Prozesse suspendiert sind. Man muß diese in den Hintergrund schicken oder abbrechen. Eine etwas unsaubere Möglichkeit wäre, zweimal hintereinander exit einzugeben. Dann werden alle suspendierten Prozesse abgewürgt (d.h. erhalten ein SIGHUP, was nicht zwingend bedeutet daß sie sich auch beenden!).
Mit dem Kommando stop %nr kann man einen im Hintergrund laufenden Prozeß stoppen. Ein äquivalentes cont-Kommando gibt es leider nicht, dazu muß man ein Signal verschicken, am einfachsten mit kill -CONT %nr. Man könnte sich dafür z.B. einen Alias einrichten:
alias cont "kill -CONT \!*"