Jobsteuerung
100%

Prozesse · Lektion 11

Jobsteuerung

Erfahre, wie eine interaktive Shell Vordergrund-, Hintergrund- und angehaltene Jobs verwaltet.

Interaktive Shells verwenden die Jobsteuerung, um Pipelines innerhalb einer Terminalsitzung zu koordinieren. Ein Job kann einen Prozess oder eine vollständige Pipeline umfassen, die gewöhnlich in einer Prozessgruppe zusammengefasst wird, damit Terminal und Shell sie als Einheit behandeln können.

Einen Hintergrundjob starten

Hänge & an, um eine Pipeline asynchron zu starten:

$ sleep 1000 &
[1] 18420

Die Shell zeigt wieder eine Eingabeaufforderung an, ohne auf die Beendigung des Jobs zu warten. Der Hintergrundstatus leitet Ausgaben nicht automatisch um, trennt das steuernde Terminal nicht ab und sorgt nicht dafür, dass der Job eine Abmeldung überlebt. Leite Ein- und Ausgaben bei Bedarf ausdrücklich um und verwende einen Dienstmanager, einen Aufgabenplaner oder einen Terminalmultiplexer für Arbeit, die die interaktive Shell überdauern muss.

Ein Hintergrundjob, der vom steuernden Terminal zu lesen versucht, wird gewöhnlich mit SIGTTIN angehalten, da er nicht zur Vordergrundprozessgruppe des Terminals gehört.

Wozu fordert ein abschließendes & eine interaktive Shell auf?

Shell-Jobs auflisten

Das Built-in jobs listet die der aktuellen Shell bekannten Jobs auf:

$ jobs
[1]    Running    sleep 1000 &
[2]-   Running    sleep 1001 &
[3]+   Stopped    sleep 1002

Die Zahl in eckigen Klammern ist eine Shell-Job-ID und keine PID. Ein vorangestelltes % bildet eine Jobspezifikation wie %1. Die Markierung + kennzeichnet den aktuellen Job, den viele Befehle auswählen, wenn kein Operand angegeben ist; - kennzeichnet den vorherigen Job.

Da die Jobtabelle zu einer einzelnen Shell gehört, kann die Shell eines anderen Terminals diese Jobs gewöhnlich nicht mit ihren eigenen Built-ins jobs, fg oder bg auflisten oder ansprechen.

Was listet das Built-in jobs auf?

Einen Job anhalten und fortsetzen

Während ein Job im Vordergrund läuft, veranlasst das Drücken von Ctrl-Z das Terminal gewöhnlich, SIGTSTP an seine Vordergrundprozessgruppe zu senden. Nach dem Anhalten des Jobs erhält die Shell wieder die Kontrolle:

$ sleep 1002
^Z
[3]+  Stopped    sleep 1002

Setze den aktuellen angehaltenen Job im Hintergrund fort mit:

$ bg

bg sendet ein Fortsetzungssignal und lässt den Job außerhalb des Terminalvordergrunds. Es ist nur für einen angehaltenen Job nützlich; ein bereits im Hintergrund laufender Befehl muss nicht fortgesetzt werden.

Was bewirkt bg %3 bei dem angehaltenen Job 3?

Einen Job in den Vordergrund holen

Verwende fg mit einer Jobspezifikation, um einen Job zur Vordergrundprozessgruppe des Terminals zu machen und auf ihn zu warten:

$ fg %1

Ohne Operanden wählt fg gewöhnlich den mit + markierten aktuellen Job aus. Ein angehaltener Job wird beim Wechsel in den Vordergrund fortgesetzt.

Was bewirkt fg %1?

Ein Signal an einen Job senden

Shells erlauben kill die Annahme einer Jobspezifikation:

$ kill -TERM %1

Dies signalisiert gewöhnlich die Prozessgruppe des Jobs und nicht nur ein einzelnes Mitglied der Pipeline. Prüfe zuerst den ausgewählten Job und verwende SIGTERM, bevor du eine erzwungene Eskalation in Betracht ziehst. Jobspezifikationen sind Shell-Syntax; Skripte und externe Werkzeuge arbeiten häufiger mit überprüften PIDs oder Prozessgruppen-IDs.

Welcher Operand bezeichnet Shell-Job 1 und nicht Prozess-ID 1?

Lektion abgeschlossen

Sie haben Jobsteuerung abgeschlossen

Du kannst Jobs nun gezielt zwischen von der Shell gesteuerten Zuständen verschieben.

  • Verwende &, um einen Hintergrundjob ohne automatische Abtrennung zu starten.

  • Verwende jobs, um die Jobtabelle der aktuellen Shell zu prüfen.

  • Halte mit Ctrl-Z an und setze mit bg im Hintergrund fort.

  • Hole einen ausgewählten Job mit fg zurück an das Terminal.

  • Sprich Shell-Jobs beim Senden von Signalen mit %JOB_ID an.

Lernfortschritt speichern

Erstellen Sie ein kostenloses Konto, um diese Lektion zu speichern und auf jedem Gerät weiterzulernen.

Kostenloses Konto erstellen
Zurück zu Prozesse