Jobkontrolle
CIP Index Up Left Right

Jobkontrolle

Die einfachste Art, ein Kommando zu starten ist, seinen Namen am Shell-Prompt einzugeben und die RETURN-Taste zu drücken. Dann wird das Programm von der Shell gestartet, und erst nach seiner Beendigung kommt der nächste Shell-Prompt, und man kann das nächste Kommando eingeben.

Unter Jobkontrolle versteht man nun, wie man mit der Shell mehrere Prozesse kontrolliert, die gleichzeitig laufen (bzw. nicht laufen, weil sie gestoppt sind).

Prozesse Suspendieren

Oft fällt einem wenn man ein Programm gestartet hat noch etwas ein, das man nachschauen muß, oder es wird einem einfach die Wartezeit auf das Ende des Prozesses zu lang. Dann kann man die Shell anweisen, den Prozeß zu suspendieren.

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:

Jobnummer
Hier werden einfach alle gestoppten Prozesse durchgezählt. Man braucht diese Nummer bei den anderen Job-Kommandos.

Rang
Hier wird angezeigt, welcher Prozeß der "aktuelle" ist, auf den alle Job-Kommandos wirken, wenn man keine Job-Nummer angibt.

Status
Hier ist der Status des Prozesses angegeben. Der ist Suspended, wenn man ihn mit CONTROL-Z gestoppt hat, bzw. Running, wenn der Prozeß im Hintergrund weiter läuft.

Name
Hier wird das Kommando und die ihm übergebenen Parameter angezeigt.

Prozeß weiterlaufen lassen

Möchte man einen der gestoppten Prozesse weiterlaufen lassen, so hat man 2 Möglichkeiten: im Hintergrund oder im Vordergrund.

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.

Vorder- und Hintergrund

Was ist nun der Unterschied zwischen Vorder- und Hintergrund?

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.

Prozeß im Hintergrund starten

Man muß einen Prozeß nicht erst suspendieren und dann mit bg in den Hintergrund schicken um ihn zu verdrängen.

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 \!*"

Siehe auch:
Beschreibung der Shell-internen Kommandos bg, fg, stop, kill