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.
Prozesse · Lektion 11
Jobsteuerung
Erfahre, wie eine interaktive Shell Vordergrund-, Hintergrund- und angehaltene Jobs verwaltet.
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?
Übe diese Vorgänge mit harmlosen Befehlen wie sleep im Lab Linux-Prozesse verwalten und überwachen.
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-Zan und setze mitbgim Hintergrund fort.Hole einen ausgewählten Job mit
fgzurück an das Terminal.Sprich Shell-Jobs beim Senden von Signalen mit
%JOB_IDan.
Lernfortschritt speichern
Erstellen Sie ein kostenloses Konto, um diese Lektion zu speichern und auf jedem Gerät weiterzulernen.
Kostenloses Konto erstellen