Einführung
Linux bietet leistungsstarke Möglichkeiten zur gleichzeitigen Verwaltung mehrerer Prozesse. Eines seiner wichtigsten Merkmale ist die Fähigkeit, Prozesse im Hintergrund auszuführen. Dies ermöglicht es Ihnen, das Terminal weiterhin für andere Aufgaben zu nutzen, während langlaufende Prozesse ausgeführt werden.
In diesem Lab werden Sie essentielle Techniken zur Verwaltung von Hintergrundprozessen in Linux-Systemen lernen. Diese Fähigkeiten sind für effizientes Multitasking in Befehlszeilenumgebungen von entscheidender Bedeutung und werden regelmäßig von Systemadministratoren und Entwicklern eingesetzt.
Am Ende dieses Labs werden Sie verstehen, wie Sie Hintergrundprozesse starten, ihren Status überwachen und sie effektiv steuern können. Diese Fähigkeiten werden Ihnen helfen, die Systemressourcen besser zu nutzen und Ihre Produktivität bei der Arbeit mit Linux-Systemen zu verbessern.
Einen Prozess im Hintergrund starten
In Linux können Sie einen Befehl im Hintergrund ausführen, indem Sie ein kaufmännisches Und-Zeichen (&) an das Ende Ihres Befehls anhängen. Dies weist die Shell an, den Prozess im Hintergrund auszuführen, sodass Sie Ihr Terminal weiterhin verwenden können, während der Befehl ausgeführt wird.
Lassen Sie uns ein einfaches Skript erstellen und ausführen, das einen lang laufenden Prozess simuliert.
Stellen Sie zunächst sicher, dass Sie sich im Projektverzeichnis befinden:
cd ~/project
Erstellen wir nun eine Skriptdatei namens long_running.sh mit dem Texteditor Nano:
nano ~/project/long_running.sh
Wenn sich der Nano-Editor öffnet, geben Sie den folgenden Code ein:
#!/bin/bash
echo "Starting a long process..."
sleep 600
echo "Process completed"
Dieses Skript:
- Gibt eine Startmeldung aus (Prints a starting message)
- Pausiert für 10 Minuten (simuliert eine zeitaufwändige Aufgabe)
- Gibt eine Abschlussmeldung aus (Prints a completion message)
So speichern Sie die Datei in Nano:
- Drücken Sie
Ctrl+O, um die Datei zu schreiben (write the file) - Drücken Sie
Enter, um den Dateinamen zu bestätigen (confirm the filename) - Drücken Sie
Ctrl+X, um Nano zu beenden (exit nano)
Als Nächstes müssen wir das Skript ausführbar machen:
chmod +x ~/project/long_running.sh
Führen wir nun das Skript zuerst im Vordergrund aus, um zu sehen, wie es funktioniert:
./long_running.sh
Sie werden sehen:
Starting a long process...
Beachten Sie, dass Ihr Terminal jetzt für 15 Sekunden belegt ist, bis das Skript abgeschlossen ist. Sie können während dieser Zeit keine neuen Befehle eingeben.
Führen wir nun dasselbe Skript im Hintergrund aus, indem wir ein kaufmännisches Und-Zeichen (&) am Ende hinzufügen:
./long_running.sh &
Sie sehen eine ähnliche Ausgabe wie:
[1] 1234
Starting a long process...
Die Ausgabe zeigt:
[1]- die Jobnummer, die von der Shell zugewiesen wurde (the job number assigned by the shell)1234- die Prozess-ID (PID - Prozessidentifikationsnummer), die auf Ihrem System eine andere Nummer sein wird- Die Startmeldung des Skripts (The script's starting message)
Obwohl das Skript noch ausgeführt wird, kehrt Ihre Shell-Eingabeaufforderung sofort zurück, sodass Sie neue Befehle eingeben können. Nach 15 Sekunden wird die Abschlussmeldung angezeigt:
Process completed
[1]+ Done ./long_running.sh
Dies bestätigt, dass der Hintergrundprozess seine Ausführung abgeschlossen hat.
Anzeigen von Hintergrundprozessen
Nachdem Sie Prozesse im Hintergrund gestartet haben, müssen Sie wissen, wie Sie sie verfolgen können. Linux bietet den jobs-Befehl, um alle im aktuellen Terminalsitzung laufenden Hintergrundprozesse anzuzeigen.
Starten wir mehrere Hintergrundprozesse und zeigen wir sie dann an:
## Start the first background process
./long_running.sh &
Sie werden eine Ausgabe ähnlich der folgenden sehen:
[1] 1234
Starting a long process...
Nun starten wir einen zweiten Hintergrundprozess:
## Start the second background process
./long_running.sh &
Sie werden eine Ausgabe ähnlich der folgenden sehen:
[2] 1235
Starting a long process...
Um alle Ihre Hintergrundprozesse (Jobs) anzuzeigen, verwenden Sie den jobs-Befehl:
jobs
Sie sollten eine Ausgabe ähnlich der folgenden sehen:
[1] Running ./long_running.sh &
[2]- Running ./long_running.sh &
Dies zeigt, dass Sie zwei Hintergrundjobs laufen haben. Die Zahlen in eckigen Klammern sind Job-IDs, die Sie verwenden können, um auf bestimmte Jobs mit anderen Befehlen zu verweisen.
Der jobs-Befehl unterstützt mehrere nützliche Optionen:
jobs -l- zeigt die Prozess-IDs zusammen mit den Job-Informationen anjobs -p- zeigt nur die Prozess-IDs der Jobs an
Versuchen Sie die -l-Option, um mehr Details anzuzeigen:
jobs -l
Die Ausgabe wird die Prozess-IDs enthalten:
[1] 1234 Running ./long_running.sh &
[2]- 1235 Running ./long_running.sh &
Warten Sie, bis beide Prozesse abgeschlossen sind, bevor Sie mit dem nächsten Schritt fortfahren. Sie werden Nachrichten wie die folgenden sehen:
Process completed
[1]+ Done ./long_running.sh
Process completed
[2]+ Done ./long_running.sh
Verschieben von Prozessen zwischen Vordergrund und Hintergrund
Linux ermöglicht es Ihnen, Prozesse zwischen Vordergrund- und Hintergrundzuständen zu verschieben. Dies ist besonders nützlich, wenn:
- Sie einen Prozess im Vordergrund gestartet haben und das Terminal für etwas anderes nutzen müssen
- Sie einen Hintergrundprozess in den Vordergrund bringen möchten, um mit ihm zu interagieren
Lassen Sie uns lernen, wie man dies mit den Befehlen fg (Vordergrund) und bg (Hintergrund) sowie der Prozessunterbrechung macht.
Zunächst starten wir unser langlaufendes Skript im Vordergrund (ohne das &):
./long_running.sh
Sie werden sehen:
Starting a long process...
Beachten Sie, dass die Shell-Eingabeaufforderung nicht zurückkehrt - das Terminal wird jetzt von diesem im Vordergrund laufenden Prozess belegt.
Um diesen Prozess zu unterbrechen (pausieren) und die Kontrolle über Ihr Terminal wieder zu erlangen:
- Drücken Sie
Ctrl+Z
Sie werden eine Ausgabe ähnlich der folgenden sehen:
^Z
[1]+ Stopped ./long_running.sh
Der Prozess ist jetzt unterbrochen und läuft nicht mehr. Sie können dies mit dem jobs-Befehl bestätigen:
jobs
Ausgabe:
[1]+ Stopped ./long_running.sh
Um den unterbrochenen Prozess im Hintergrund fortzusetzen, verwenden Sie den bg-Befehl:
bg %1
Das %1 bezieht sich auf die Jobnummer 1. Sie werden sehen:
[1]+ ./long_running.sh &
Der Prozess läuft jetzt im Hintergrund. Bestätigen Sie dies mit jobs:
jobs
Ausgabe:
[1]+ Running ./long_running.sh &
Um einen Hintergrundprozess in den Vordergrund zu bringen, verwenden Sie den fg-Befehl:
fg %1
Der Prozess wird wieder im Vordergrund laufen, und Ihr Terminal wird belegt sein, bis er abgeschlossen ist:
./long_running.sh
Process completed
Nachdem der Prozess abgeschlossen ist, kehrt die Shell-Eingabeaufforderung zurück.
Prozesse auch nach Schließen des Terminals laufen lassen
Wenn Sie einen Prozess mit & im Hintergrund ausführen, wird er beendet, wenn Sie das Terminal schließen. Um einen Prozess auch nach dem Schließen des Terminals laufen zu lassen, können Sie den nohup-Befehl verwenden.
nohup (Abkürzung für "no hang up") verhindert, dass der Prozess das SIGHUP-Signal (Hang up) empfängt, das an Prozesse gesendet wird, wenn das Terminal geschlossen wird.
Ändern wir unser Skript, damit es länger läuft:
nano ~/project/long_running.sh
Aktualisieren Sie den Inhalt wie folgt:
#!/bin/bash
echo "Starting a very long process..."
sleep 60
echo "Process completed" > ~/project/completed.txt
Speichern Sie und verlassen Sie nano (Ctrl+O, Enter, Ctrl+X).
Jetzt führen wir das Skript mit nohup aus:
nohup ./long_running.sh &
Sie werden eine Ausgabe ähnlich der folgenden sehen:
[1] 1234
nohup: ignoring input and appending output to 'nohup.out'
Die Ausgabe des Skripts wird nicht im Terminal angezeigt. Stattdessen wird sie in eine Datei namens nohup.out umgeleitet. Sie können diese Datei überprüfen:
cat nohup.out
Sie sollten Folgendes sehen:
Starting a very long process...
Selbst wenn Sie jetzt das Terminal schließen würden, würde der Prozess weiterhin laufen. Wenn er abgeschlossen ist, wird er sowohl in nohup.out als auch in completed.txt schreiben.
Um die im Hintergrund in allen Terminals laufenden Prozesse anzuzeigen, verwenden Sie den ps-Befehl:
ps aux | grep long_running.sh
Sie werden etwas wie Folgendes sehen:
labex 1234 0.0 0.0 8160 736 pts/0 S 12:34 0:00 /bin/bash ./long_running.sh
labex 1235 0.0 0.0 14428 1020 pts/0 S+ 12:34 0:00 grep --color=auto long_running.sh
Warten Sie, bis der Prozess abgeschlossen ist (oder beenden Sie ihn, wenn Sie möchten):
## If you want to terminate the process:
kill %1
Zusammenfassung
In diesem Lab haben Sie essentielle Techniken zum Verwalten von Hintergrundprozessen in Linux gelernt:
Starten von Hintergrundprozessen: Sie haben gelernt, wie man Prozesse im Hintergrund mit dem
&-Operator startet, sodass Sie das Terminal weiterhin nutzen können, während der Prozess läuft.Anzeigen von Hintergrundprozessen: Sie haben den
jobs-Befehl verwendet, um alle im aktuellen Terminalsession laufenden Hintergrundprozesse anzuzeigen.Verschieben von Prozessen zwischen Vordergrund und Hintergrund: Sie haben geübt,
Ctrl+Zzu verwenden, um einen Prozess anzuhalten,bgum ihn im Hintergrund fortzusetzen undfgum ihn in den Vordergrund zu bringen.Prozesslauf auch nach Terminal-Schließung aufrechterhalten: Sie haben den
nohup-Befehl verwendet, um Prozesse auch dann laufen zu lassen, wenn die Terminalsession endet.
Diese Fähigkeiten sind für effektives Multitasking in Linux-Umgebungen unerlässlich. Sie ermöglichen es Ihnen, mehrere Prozesse gleichzeitig auszuführen, die Terminalressourcen effizient zu nutzen, langlaufende Prozesse ohne geöffnete Terminals aufrechtzuerhalten und die Ausführungsstatus von Prozessen zu verwalten.
Mit diesen Techniken können Sie effizienter und effektiver in Linux-Befehlszeilenumgebungen arbeiten, unabhängig davon, ob Sie Server verwalten, Anwendungen entwickeln oder Systemadministrationstasks ausführen.



