Einführung
In diesem Lab werden Sie die Grundlagen der Linux-Jobverwaltung (Job Management) lernen. Die Jobverwaltung ist eine essentielle Fähigkeit für Linux-Nutzer, die es Ihnen ermöglicht, mehrere Prozesse gleichzeitig auszuführen und deren Ausführung zu steuern. Durch das Beherrschen der Jobverwaltung können Sie Befehle effizient im Hintergrund ausführen, zwischen Vordergrund- und Hintergrundaufgaben wechseln und die Kontrolle über alle laufenden Prozesse behalten.
Im Laufe dieses Labs werden Sie lernen:
- Wie man Prozesse im Hintergrund startet
- Wie man laufende Jobs anzeigt und verwaltet
- Wie man Hintergrundjobs in den Vordergrund bringt
- Wie man laufende Jobs anhält und später wieder fortsetzt
- Wie man Jobs beendet, wenn sie nicht mehr benötigt werden
Diese Fähigkeiten sind besonders nützlich, wenn Sie mit langlaufenden Aufgaben arbeiten, die keine ständige Interaktion erfordern. So können Sie weiterhin an anderen Aufgaben arbeiten, während die Prozesse im Hintergrund laufen.
Starten und Verwalten von Hintergrundjobs
In diesem Schritt werden Sie lernen, wie Sie einen Prozess im Hintergrund mit dem Klammerand-Zeichen (&) starten und wie Sie ihn mit dem Befehl jobs verwalten.
Was ist ein Hintergrundjob?
In Linux ist ein Job ein Prozess, den die Shell verwaltet. Standardmäßig wird, wenn Sie einen Befehl in einem Terminal ausführen, dieser im Vordergrund ausgeführt - das bedeutet, dass Ihr Terminal belegt ist, bis der Befehl abgeschlossen ist. Indem Sie jedoch das &-Zeichen am Ende eines Befehls hinzufügen, können Sie ihn im Hintergrund ausführen und so Ihr Terminal für andere Aufgaben freigeben.
Erstellen eines Hintergrundprozesses
Erstellen wir ein einfaches Skript, das kontinuierlich im Hintergrund läuft. Dies simuliert eine langlaufende Aufgabe, die Sie möglicherweise ausführen möchten, während Sie weiterhin an anderen Dingen arbeiten.
Zunächst navigieren Sie in das Projektverzeichnis, falls Sie nicht bereits dort sind:
cd ~/project
Erstellen Sie nun ein Skript namens background_task.sh mit dem Texteditor nano:
nano ~/project/background_task.sh
Fügen Sie im Editor den folgenden Inhalt hinzu:
#!/bin/bash
## A simple script that simulates a long-running task
count=0
while true; do
count=$((count + 1))
echo "Task running: iteration $count"
sleep 5
done
Dieses Skript wird unendlich laufen und alle 5 Sekunden eine Nachricht ausgeben.
Drücken Sie Strg+O und anschließend Enter, um die Datei zu speichern, und dann Strg+X, um nano zu verlassen.
Als Nächstes machen Sie das Skript ausführbar:
chmod +x ~/project/background_task.sh
Führen Sie nun das Skript im Hintergrund aus, indem Sie das &-Zeichen am Ende des Befehls hinzufügen:
~/project/background_task.sh &
Sie sollten eine Ausgabe ähnlich der folgenden sehen:
[1] 1234
Die Zahl in Klammern [1] ist die Jobnummer, und die Zahl danach ist die Prozess-ID (PID). Diese Zahlen können auf Ihrem System unterschiedlich sein.
Überprüfen laufender Jobs
Um alle derzeit laufenden Hintergrundjobs anzuzeigen, verwenden Sie den Befehl jobs:
jobs
Sie sollten eine Ausgabe ähnlich der folgenden sehen:
[1] + running ~/project/background_task.sh
Dies bestätigt, dass Ihr Skript im Hintergrund läuft.
Um detailliertere Informationen über den Job, einschließlich seiner PID, zu erhalten, verwenden Sie:
jobs -l
Die Ausgabe sollte die Jobnummer, die PID und den Status anzeigen:
[1] + 1234 running ~/project/background_task.sh
Ihr Terminal bleibt für Sie frei, um andere Befehle auszuführen, während das Skript weiterhin im Hintergrund ausgeführt wird. Die Ausgabe des Skripts wird weiterhin an das Terminal gesendet, sodass Sie in regelmäßigen Abständen Nachrichten sehen werden.
Hintergrundjobs in den Vordergrund bringen
In diesem Schritt lernen Sie, wie Sie einen Hintergrundjob mit dem Befehl fg in den Vordergrund bringen. Dies ist nützlich, wenn Sie mit einem Prozess interagieren müssen, der derzeit im Hintergrund läuft.
Was bedeutet "in den Vordergrund bringen"?
Das "in den Vordergrund bringen" (Foregrounding) bezieht sich auf den Prozess, bei dem ein Hintergrundjob in den Vordergrund gebracht wird und damit der aktive Prozess in Ihrem Terminal wird. Wenn ein Job im Vordergrund ist, hat er die Kontrolle über Ihr Terminal - Sie können direkt mit ihm interagieren, aber Sie können keine anderen Befehle ausführen, bis er abgeschlossen oder wieder in den Hintergrund verschoben wird.
Verwendung des Befehls fg
Stellen Sie sicher, dass Ihr Skript background_task.sh aus dem vorherigen Schritt weiterhin läuft. Sie können dies mit folgendem Befehl überprüfen:
jobs
Ihr Skript sollte als laufender Job aufgeführt werden.
Um den Job in den Vordergrund zu bringen, verwenden Sie den Befehl fg gefolgt von der Jobnummer mit einem Prozentzeichen:
fg %1
Wenn Sie nur einen Hintergrundjob haben, können Sie einfach Folgendes eingeben:
fg
Nach der Ausführung des Befehls wird das Skript in den Vordergrund gebracht, und Sie sehen seine Ausgabe direkt in Ihrem Terminal:
Task running: iteration X
Task running: iteration X+1
...
Sie werden bemerken, dass Ihre Eingabeaufforderung verschwindet und das Skript nun die Kontrolle über Ihr Terminal hat. Sie können keine anderen Befehle eingeben, bis Sie entweder das Skript beenden oder es wieder in den Hintergrund verschieben.
Beenden des Vordergrundjobs
Um den Vordergrundjob zu beenden und zur Eingabeaufforderung zurückzukehren, drücken Sie Strg+C. Dadurch wird ein Unterbrechungssignal an den Prozess gesendet, der ihn beendet.
^C
Das Terminal sollte nun eine Meldung anzeigen, die darauf hinweist, dass der Job beendet wurde, und Sie sollten wieder Ihre Eingabeaufforderung sehen.
Um zu überprüfen, dass der Job nicht mehr läuft, führen Sie folgenden Befehl aus:
jobs
Es sollte keine Ausgabe geben, was darauf hinweist, dass keine Hintergrundjobs laufen.
Lassen Sie uns unser Skript erneut im Hintergrund starten, um mit dem nächsten Schritt fortzufahren:
~/project/background_task.sh &
Sie sollten eine Bestätigung sehen, dass der Job gestartet wurde, mit einer Ausgabe ähnlich der folgenden:
[1] 1345
Denken Sie daran, dass die Jobnummer und die PID auf Ihrem System unterschiedlich sein können.
Jobs anhalten und fortsetzen
In diesem Schritt lernen Sie, wie Sie einen laufenden Vordergrundjob anhalten und ihn entweder im Vordergrund oder Hintergrund fortsetzen können. Dies ist nützlich, wenn Sie einen Prozess vorübergehend pausieren müssen, ohne ihn zu beenden.
Anhalten eines Vordergrundjobs
Zunächst bringen wir unseren Hintergrundjob in den Vordergrund:
fg %1
Sie sollten nun die Ausgabe des Skripts in Ihrem Terminal sehen. Um diesen Vordergrundjob anzuhalten, drücken Sie Strg+Z:
^Z
Sie sollten eine Meldung ähnlich der folgenden sehen:
[1] + suspended ~/project/background_task.sh
Dies zeigt an, dass der Job angehalten wurde. Der Job ist immer noch im Speicher geladen, wird aber nicht ausgeführt - er ist im Wesentlichen "pausiert".
Um zu überprüfen, dass der Job angehalten ist, führen Sie folgenden Befehl aus:
jobs
Sie sollten eine Ausgabe ähnlich der folgenden sehen:
[1] + suspended ~/project/background_task.sh
Fortsetzen eines angehaltenen Jobs im Hintergrund
Sie können einen angehaltenen Job entweder im Vordergrund oder Hintergrund fortsetzen. Um ihn im Hintergrund fortzusetzen, verwenden Sie den Befehl bg gefolgt von der Jobnummer:
bg %1
Sie sollten eine Meldung sehen, die bestätigt, dass der Job im Hintergrund fortgesetzt wurde:
[1] + continued ~/project/background_task.sh
Überprüfen Sie, dass der Job nun im Hintergrund läuft:
jobs
Die Ausgabe sollte zeigen, dass der Status des Jobs von "suspended" (angehalten) auf "running" (läuft) geändert wurde:
[1] + running ~/project/background_task.sh
Fortsetzen eines angehaltenen Jobs im Vordergrund
Lassen Sie uns den Job erneut anhalten. Zunächst bringen Sie ihn in den Vordergrund:
fg %1
Drücken Sie dann Strg+Z, um ihn anzuhalten:
^Z
Jetzt verwenden Sie statt bg (um ihn im Hintergrund fortzusetzen) fg, um ihn im Vordergrund fortzusetzen:
fg %1
Der Job wird die Ausführung fortsetzen, und Sie werden seine Ausgabe wieder in Ihrem Terminal sehen.
Lassen Sie uns den Job beenden, indem Sie Strg+C drücken:
^C
Dies wird den Job beenden und Sie zur Eingabeaufforderung zurückbringen.
Verwendung der Jobkontrolle in Ihrem Arbeitsablauf
Die Fähigkeit, Jobs anzuhalten, im Hintergrund oder Vordergrund fortzusetzen und zu beenden, gibt Ihnen eine starke Kontrolle über Ihre Prozesse. Dieser Arbeitsablauf ist besonders nützlich, wenn:
- Sie etwas anderes überprüfen müssen, während ein Prozess läuft
- Sie vorübergehend Systemressourcen freigeben müssen
- Sie mehrere Prozesse interaktiv ausführen möchten, ohne mehrere Terminalfenster zu öffnen
Für den nächsten Schritt starten Sie die Hintergrundaufgabe erneut:
~/project/background_task.sh &
Beenden von Hintergrundjobs
In diesem Schritt lernen Sie verschiedene Methoden kennen, um Hintergrundjobs zu beenden, wenn sie nicht mehr benötigt werden. Ein korrektes Beenden von Jobs ist wichtig, um Systemressourcen freizugeben und die Systemleistung aufrechtzuerhalten.
Identifizieren von Jobs zur Beendigung
Zunächst überprüfen wir, welche Jobs derzeit laufen:
jobs
Sie sollten Ihre Hintergrundaufgabe laufen sehen:
[1] + running ~/project/background_task.sh
Wenn Sie detailliertere Informationen, einschließlich der Prozess-ID (PID), benötigen, verwenden Sie:
jobs -l
Dies wird eine Ausgabe ähnlich der folgenden anzeigen:
[1] + 1456 running ~/project/background_task.sh
Notieren Sie sich die PID (die Zahl nach der Jobnummer), da diese zum Beenden des Prozesses verwendet werden kann.
Methode 1: Beenden eines Jobs mithilfe seiner Jobnummer
Der einfachste Weg, einen Hintergrundjob zu beenden, ist die Verwendung des Befehls kill mit der Jobnummer:
kill %1
Überprüfen Sie, ob der Job beendet wurde:
jobs
Sie könnten sehen:
[1] + terminated ~/project/background_task.sh
Wenn der Job immer noch läuft (einige Prozesse erfordern möglicherweise ein stärkeres Beendigungssignal), können Sie Folgendes verwenden:
kill -9 %1
Das Flag -9 sendet ein SIGKILL-Signal, das den Prozess zwangsweise beendet, ohne ihm die Möglichkeit zu geben, aufzuräumen.
Methode 2: Beenden eines Jobs mithilfe seiner PID
Lassen Sie uns eine weitere Instanz unseres Skripts im Hintergrund starten:
~/project/background_task.sh &
Sie sollten eine Ausgabe sehen, die die Jobnummer und die PID anzeigt:
[1] 1567
Um diesen Job mithilfe seiner PID zu beenden, verwenden Sie:
kill 1567
Ersetzen Sie 1567 durch die tatsächliche PID Ihres Jobs.
Überprüfen Sie, ob der Job beendet wurde:
jobs
Methode 3: Verwenden des Prozessnamens mit killall
Lassen Sie uns noch eine weitere Instanz unseres Skripts starten:
~/project/background_task.sh &
Wenn Sie mehrere Instanzen desselben Prozesses laufen haben, können Sie alle auf einmal mithilfe des Befehls killall beenden:
killall background_task.sh
Dieser Befehl beendet alle Prozesse mit dem Namen background_task.sh.
Überprüfen Sie, ob keine Jobs mehr laufen:
jobs
Es sollte keine Ausgabe geben, was darauf hinweist, dass alle Hintergrundjobs beendet wurden.
Verständnis von Beendigungssignalen
Wenn Sie den Befehl kill verwenden, senden Sie ein Signal an den Prozess. Standardmäßig sendet kill das SIGTERM-Signal (Signal 15), das den Prozess darum bittet, sich gracefully (ordnungsgemäß) zu beenden. Wenn ein Prozess nicht auf SIGTERM reagiert, können Sie SIGKILL (Signal 9) verwenden, um die Beendigung zu erzwingen:
kill -TERM %1 ## Entspricht kill %1
kill -KILL %1 ## Entspricht kill -9 %1
Andere nützliche Signale sind:
- SIGHUP (Signal 1): Wird oft verwendet, um Konfigurationsdateien neu zu laden
- SIGINT (Signal 2): Entspricht dem Drücken von Strg+C
- SIGSTOP (Signal 19): Hält einen Prozess an (kann nicht abgefangen oder ignoriert werden)
- SIGCONT (Signal 18): Setzt einen angehaltenen Prozess fort
Zu einer letzten Demonstration starten wir unsere Hintergrundaufgabe erneut und beenden sie dann:
~/project/background_task.sh &
jobs
kill %1
jobs
Diese Sequenz startet den Job, bestätigt, dass er läuft, beendet ihn und überprüft dann, dass er nicht mehr läuft.
Zusammenfassung
In diesem Lab haben Sie essentielle Fähigkeiten zur Verwaltung von Jobs in einer Linux-Umgebung gelernt:
Starten von Hintergrundjobs: Sie haben gelernt, wie Sie Prozesse im Hintergrund mit dem
&-Zeichen ausführen können. Dies ermöglicht es Ihnen, weiterhin im Terminal zu arbeiten, während langlaufende Aufgaben ausgeführt werden.Überprüfen des Jobstatus: Sie haben den
jobs-Befehl verwendet, um Informationen über laufende Jobs anzuzeigen, einschließlich ihres Zustands, ihrer Jobnummer und ihrer Prozess-ID.Bringen von Hintergrundjobs in den Vordergrund: Sie haben geübt, Hintergrundjobs mit dem
fg-Befehl in den Vordergrund zu bringen, was es Ihnen ermöglicht, direkt mit ihnen zu interagieren.Anhalten und Fortsetzen von Jobs: Sie haben gelernt, wie Sie laufende Vordergrundjobs mit
Strg+Zanhalten und sie entweder im Vordergrund (fg) oder Hintergrund (bg) fortsetzen können.Beenden von Jobs: Sie haben verschiedene Methoden zur Beendigung von Jobs erkundet, wenn sie nicht mehr benötigt werden. Dazu gehört die Verwendung des
kill-Befehls mit Jobnummern oder PIDs sowie die Verwendung vonkillall, um mehrere Prozesse anhand ihres Namens zu beenden.
Diese Jobverwaltungskompetenzen sind für jeden Linux-Benutzer wertvoll, insbesondere wenn Sie mit langlaufenden Prozessen arbeiten oder in einer Terminalumgebung multitasken. Indem Sie steuern, wie und wann Prozesse laufen, können Sie Ihre Systemressourcen effizienter nutzen und Ihren Arbeitsablauf optimieren.
Denken Sie daran, dass verschiedene Signale mit dem kill-Befehl verwendet werden können, um das Verhalten von Prozessen zu steuern, von einer ordnungsgemäßen Beendigung bis hin zu einer zwangsweisen Beendigung. Dies gibt Ihnen eine feingliedrige Kontrolle über die Prozesse Ihres Systems.



