Jobkontrolle (UNIX)

Im Unix und Unix-artig Betriebssysteme, Jobkontrolle bezieht sich auf die Kontrolle von Arbeitsplätze durch eine Hülsebesonders interaktiv, wo ein "Job" eine Shell -Darstellung für a ist Prozessgruppe. Grundlegende Funktionen für die Arbeitskontrolle sind die Suspendierung, Wiederaufnahme oder Beendigung aller Prozesse in der Job-/Prozessgruppe. Fortgeschrittene Funktionen können durch Senden durchgeführt werden Signale zum Job. Die Arbeitskontrolle ist von besonderem Interesse an Unix aufgrund ihrer Multiprozessierung, und sollte unterschieden werden von Jobkontrolle im Allgemeinen, was häufig auf sequentielle Ausführung angewendet wird (Stapelverarbeitung).

Überblick

Beim Benutzen Unix oder Unix-artig Betriebssysteme über a Terminal (oder Terminal-Emulator) Ein Benutzer wird zunächst nur einen einzigen Prozess ausführen, deren sein Anmeldung Hülse. Die meisten Aufgaben[a] (Verzeichnisauflistung, Bearbeiten von Dateien usw.) kann leicht erreicht werden Standardeingangs- und Standardausgabe an die Shell, die vom Terminal liest oder schreibt, und das Fangen von Signalen, die von der Tastatur gesendet werden Kontrolle+C.

Manchmal möchte der Benutzer jedoch eine Aufgabe ausführen, während er das Terminal für einen anderen Zweck verwendet. Eine Aufgabe, die ausgeführt wird, aber keine Eingaben vom Terminal erhält, soll "im Hintergrund" ausgeführt werden, während die einzelne Aufgabe, die Eingaben vom Terminal erhält, "im Vordergrund" ist. Jobkontrolle ist eine Einrichtung, die entwickelt wurde, um dies zu ermöglichen, indem der Benutzer Prozesse im Hintergrund starten kann, bereits ausgeführte Prozesse in den Hintergrund senden, bringen Hintergrundprozesse in den Vordergrund und Prozesse aussetzen oder beenden.

Das Konzept von a Arbeit ordnet das (Shell) -Konzept eines einzelnen Shell -Befehls zum (Betriebssystem) Konzept der möglicherweise vielen Prozesse ab, die der Befehl mit sich bringt. Multi-Process-Aufgaben entstehen, da Prozesse zusätzliche Kinderprozesse erzeugen können, und ein einzelner Shell-Befehl kann aus a bestehen Pipeline von mehreren Kommunikationsprozessen. Beispielsweise ein Befehl zur Auswahl von Zeilen, die den Text "Titel" enthalten, sortieren diese alphabetisch und zeigen das Ergebnis in a an Pager.

GREP -Titel einige file.txt | Sortieren | weniger

Dies schafft mindestens drei Prozesse: eine für Grep, eins für Sortierenund einer für weniger. Die Arbeitskontrolle ermöglicht es der Shell, diese zugehörigen Prozesse als eine Entität zu steuern und wenn ein Benutzer die entsprechende Schlüsselkombination ausgibt (normalerweise Kontrolle+Z) Die gesamte Gruppe von Prozessen wird suspendiert.

Jobs werden vom Betriebssystem als Single verwaltet Prozessgruppeund der Job ist die interne Darstellung einer solchen Gruppe durch die Shell. Dies ist definiert in Posix wie:[1]

Eine Reihe von Prozessen, die eine Shell -Pipeline umfassen, und alle Prozesse, die alle in derselben Prozessgruppe enthalten sind.

Ein Job kann von a bezeichnet werden handhaben[b] genannt Jobkontrolljob -ID oder einfach Job-ID, was verwendet wird von Muschelgebaute sich auf den Job beziehen. Job -IDs beginnen mit dem % Charakter; %n identifiziert den Job n, während %% identifiziert den aktuellen Job. Andere Job -IDs werden von angegeben von Posix.[2] In informeller Nutzung kann die Nummer als "Jobnummer" oder "Job-ID" bezeichnet werden, und die Bash-Dokumentation bezieht sich auf die (%-Prefixed) Job-ID als die Jobspec.[3]

Jobkontrolle und Job -IDs werden in der Regel nur in der interaktiven Verwendung verwendet, wenn sie die Verweise auf Prozessgruppen vereinfachen. Beim Skripten werden stattdessen PGIDs verwendet, da sie präziser und robuster sind und die Arbeitsplatzkontrolle in Bash -Skripten standardmäßig deaktiviert wird.

Geschichte

Jobkontrolle wurde zuerst in der implementiert C Shell von Jim Kulp,[4] dann bei Iiasa In Österreich nutzen Sie die Funktionen des 4.1BSD Kernel. Das Kornshell, entwickelt bei Bell Labs, übernahm es und wurde später in die SVR4 -Version des Bourne Shellund existiert in den meisten modernen Unix -Muscheln.

Befehle

Der POSIX -Standard gibt zwei Befehle für die Wiederaufnahme von suspendierten Jobs im Hintergrund bzw. im Vordergrund an BG und fg. Diese wurden nach den Korn -Shell -Arbeitskontrollbefehlen modelliert.[5]

Implementierung

Normalerweise führt die Shell eine Liste von Jobs in a Jobtisch. Erinnern Sie sich daran, dass ein Job einer Prozessgruppe entspricht, die aus allen Mitgliedern von a besteht Pipeline und ihre Nachkommen. Das Arbeitsplätze Der Befehl wird die in der Jobtabelle vorhandenen Hintergrundjobs zusammen mit ihrer Jobnummer und ihrem Jobstatus (gestoppt oder ausgeführt) aufgeführt. Wenn ein Sitzung endet, wenn der Benutzer meldet sich an (verlässt die Hülle, die das endet Sitzungsleiter Prozess), der Shell -Prozess sendet SEUFZEND zu allen Jobs und wartet darauf, dass die Prozessgruppen enden, bevor sie sich selbst beenden.

Das verleugnen Der Befehl kann verwendet werden, um Jobs aus der Jobtabelle zu entfernen, so dass beim Ende der Sitzung die untergeordneten Prozessgruppen weder Seufzer gesendet werden noch die Shell darauf wartet, dass sie kündigen. Sie werden also Orphan -Prozesseund kann vom Betriebssystem beendet werden, obwohl dies häufiger verwendet wird, sodass die Prozesse übernommen werden von drin (Der Kernel setzt seinen übergeordneten Prozess auf init) und führt weiter als Daemons. Alternativen, um zu verhindern, dass Arbeitsplätze beendet werden nohup und mit a Terminal Multiplexer.

Ein im Vordergrund laufender Job kann gestoppt werden, indem der Suspend -Charakter eingegeben wird (Strg-Z). Dies sendet den "Terminal Stopp" Signal (SIGTSTP) zur Prozessgruppe. Standardmäßig bewirkt SIGTSTP, dass Prozesse, die sie stoppen, und die Kontrolle an die Shell zurückgegeben wird. Ein Prozess kann jedoch einen Signalhandler für SIGTSTP registrieren oder ignorieren. Ein Prozess kann auch mit dem "Stop" -Signal (Stop "(Sigstop), die nicht gefangen oder ignoriert werden kann.

Ein im Vordergrund laufender Job kann unterbrochen werden, indem der Unterbrechungscharakter eingegeben wird (Strg-c). Dies sendet das "Interrupt" -Signal (SIGINT), die standardmäßig den Prozess beenden, obwohl er überschrieben werden kann.

Ein gestoppter Job kann als Hintergrundjob mit dem wieder aufgenommen werden BG gebaut, oder wie der Vordergrundjob mit fg. In beiden Fällen leitet die Schale um I/o angemessen und sendet die Sigcont Signal auf den Prozess, wodurch das Betriebssystem seine Ausführung wieder aufnimmt. Im VerprügelnEin Programm kann als Hintergrundjob gestartet werden, indem ein Verstärker angehängt wird (&) an die Befehlszeile; Sein Ausgang ist an das Terminal gerichtet (potenziell mit anderen Programmen ausgegeben), kann jedoch nicht aus dem Terminaleingang gelesen werden.

Ein Hintergrundprozess, der versucht, von ihm zu lesen oder ihm zu schreiben Steuerterminal wird gesendet a SIGTTIN (für Eingabe) oder SIGTTOU (für Ausgang) Signal. Diese Signale stoppen den Prozess standardmäßig, können aber auch auf andere Weise behandelt werden. Shells überschreiben häufig die Standard -Stop -Aktion von SIGTTOU, sodass Hintergrundprozesse ihre Ausgabe standardmäßig an das Steuerterminal liefern.

In bash-kompatiblen Muscheln die töten gebaut (nicht /bin/töten) können Jobs nach Job -ID sowie nach Prozessgruppen -ID signalisieren - das Senden eines Signals an einen Job sendet es an die gesamte Prozessgruppe, und die durch eine Job -ID angegebenen Jobs sollten durch Präfixen getötet werden %. töten kann jedes Signal an einen Job senden; Wenn jedoch die Absicht ist, das System der Prozesse zu befreien, die Signale Sigkill und Sigterm (Die Standardeinstellung) sind wahrscheinlich am günstigsten.

Siehe auch

Anmerkungen

  1. ^ Hier ist "Aufgabe" ein nicht-technischer Begriff für "einige Aktivitäten", während "Prozess" und "Job" technische Begriffe sind.
  2. ^ Eine Job -ID ist eine abstrakte Referenz der Shell auf eine Ressource (eine Prozessgruppe), die extern vom Betriebssystem verwaltet wird und daher ein Griff ist.

Verweise

  1. ^ IEEE STD 1003.1-2001, Abschnitt 3.201, Job
  2. ^ IEEE STD 1003.1-2001, Abschnitt 3.203, Job Control Job ID
  3. ^ 7.1 Grundlagen der Arbeitskontrolle
  4. ^ Vorwort von Bill Joy in Anderson, Gail; Paul Anderson (1986). Die UNIX C Shell Field Guide. Prentice-Hall. p. xvii. ISBN 0-13-937468-x.
  5. ^ BG- Shell and Utilities Referenz, Die einzelne Unix -Spezifikation, Version 4 von Die offene Gruppe; fg- Shell and Utilities Referenz, Die einzelne Unix -Spezifikation, Version 4 von Die offene Gruppe.

Weitere Lektüre

Externe Links