Skip to main content

Bash-Subshells und Parallelverarbeitung

Electron configurations 2 | Electronic structure of atoms | Chemistry | Khan Academy (Juni 2026)

Electron configurations 2 | Electronic structure of atoms | Chemistry | Khan Academy (Juni 2026)
Anonim

Eine Shell ist eine grundlegende Schnittstelle zur Eingabe von Befehlen in einem Linux-System. Sie können damit direkt einen Befehl eingeben oder eine Datei (Skript) angeben, die eine Folge von Befehlen enthält, die ausgeführt werden sollen. Shells sind in einer Hierarchie organisiert, und jede Shell kann eine neue Shell erstellen. Die neue Shell wird als untergeordneter Prozess - eine Subshell - der übergeordneten Shell, die sie erstellt, betrachtet.

Standardmäßig ist eine Subshell von ihrem übergeordneten Element abhängig, dh, wenn der übergeordnete Prozess beendet wird, wird auch das Subshell beendet. Alle Ausgaben werden von der Subshell an die übergeordnete Shell übergeben.

So erstellen Sie eine Subshell

In einem Bash-Shell-Skript erstellen Sie eine Subshell unter Verwendung der Klammernotation:

Im Beispiel ist die while-Schleife in Klammern eingeschlossen, wodurch sie in einer Subshell der Shell ausgeführt wird, in der die Skriptdatei ausgeführt wird.

Subshell im Hintergrund ausführen

Wenn Sie nicht angeben, dass die Subshell im Hintergrund ausgeführt werden soll, wartet die übergeordnete Shell, bis die Subshell beendet ist, bevor Sie mit dem Rest des Skripts fortfahren. Wenn Sie jedoch Subshells parallel ausführen möchten, führen Sie sie im Hintergrund aus. Dies geschieht mit dem Et-Zeichen nach dem Subshell-Ausdruck, wie hier gezeigt:

Parallele Ausführung mehrerer Subshells

Wenn Sie mehrere Subshells als Hintergrundprozesse erstellen, können Sie Aufgaben parallel ausführen. Typischerweise verwendet das Betriebssystem für jeden Prozess und Unterprozess unterschiedliche Prozessoren oder Kerne, vorausgesetzt, es gibt mindestens so viele Prozessoren oder Kerne wie Prozesse. Ansonsten werden Aufgaben denselben Prozessoren oder Kernen zugewiesen. In diesem Fall wechselt der Prozessor oder Kern kontinuierlich zwischen den zugewiesenen Aufgaben, bis die Aufgaben abgeschlossen sind. Das nächste Beispiel hat zwei Unterprozesse. Die erste zählt von 1 bis 99 und die zweite von 1000 bis 1099.

Verwenden Sie die wait-Anweisung, um den übergeordneten Prozess anzuweisen, zu warten, bis die Unterprozesse abgeschlossen sind, bevor Sie mit dem Rest des Skripts fortfahren:

Verwendet für Subshells

Subshells sind nützlich, wenn Befehle in einer bestimmten Umgebung oder in einem bestimmten Verzeichnis ausgeführt werden müssen. Wenn jeder Befehl in einer anderen Subshell ausgeführt wird, besteht kein Risiko, dass Variableneinstellungen verwechselt werden. Nach dem Abschluss müssen die Einstellungen und das aktuelle Verzeichnis nicht wiederhergestellt werden, da die Umgebung des übergeordneten Prozesses von keinem seiner Unterprozesse beeinflusst wird.

Subshells können in Funktionsdefinitionen verwendet werden, so dass sie mit verschiedenen Parametern mehrmals ausgeführt werden können.