Verwaltung von Hintergrundaufträgen

LinuxLinuxBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab erfahren Sie, wie Sie Hintergrundaufträge in Linux mit verschiedenen Befehlen verwalten können. Sie werden lernen, wie Sie Prozesse im Hintergrund ausführen, deren Status überwachen und sie steuern können. Dieses Wissen ist für effizientes Multitasking in einer Linux-Umgebung von entscheidender Bedeutung, da es Ihnen ermöglicht, mehrere Aufgaben gleichzeitig auszuführen, ohne Ihr Terminal zu blockieren.

Ziele

Am Ende dieses Labs können Sie:

  • Befehle im Hintergrund mit dem &-Operator ausführen
  • Hintergrundaufträge auflisten und überwachen mit dem jobs-Befehl
  • Hintergrundaufträge in den Vordergrund bringen mit dem fg-Befehl
  • Hintergrundaufträge mit dem kill-Befehl beenden
  • Die terminal-spezifische Natur von Hintergrundaufträgen verstehen

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/RemoteAccessandNetworkingGroup(["Remote Access and Networking"]) linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/ProcessManagementandControlGroup(["Process Management and Control"]) linux(("Linux")) -.-> linux/CompressionandArchivingGroup(["Compression and Archiving"]) linux/BasicSystemCommandsGroup -.-> linux/sleep("Execution Delaying") linux/FileandDirectoryManagementGroup -.-> linux/find("File Searching") linux/ProcessManagementandControlGroup -.-> linux/jobs("Job Managing") linux/ProcessManagementandControlGroup -.-> linux/fg("Job Foregrounding") linux/ProcessManagementandControlGroup -.-> linux/kill("Process Terminating") linux/ProcessManagementandControlGroup -.-> linux/bg_process("Background Management") linux/CompressionandArchivingGroup -.-> linux/tar("Archiving") linux/RemoteAccessandNetworkingGroup -.-> linux/ping("Network Testing") subgraph Lab Skills linux/sleep -.-> lab-43{{"Verwaltung von Hintergrundaufträgen"}} linux/find -.-> lab-43{{"Verwaltung von Hintergrundaufträgen"}} linux/jobs -.-> lab-43{{"Verwaltung von Hintergrundaufträgen"}} linux/fg -.-> lab-43{{"Verwaltung von Hintergrundaufträgen"}} linux/kill -.-> lab-43{{"Verwaltung von Hintergrundaufträgen"}} linux/bg_process -.-> lab-43{{"Verwaltung von Hintergrundaufträgen"}} linux/tar -.-> lab-43{{"Verwaltung von Hintergrundaufträgen"}} linux/ping -.-> lab-43{{"Verwaltung von Hintergrundaufträgen"}} end

Ausführen eines Befehls im Hintergrund

Beginnen wir damit, einen einfachen Befehl im Hintergrund auszuführen.

  1. Öffnen Sie Ihr Terminal. Sie sollten sich im Verzeichnis /home/labex/project befinden. Wenn nicht, können Sie in dieses Verzeichnis wechseln, indem Sie Folgendes eingeben:

    cd /home/labex/project
  2. Wir verwenden den sleep-Befehl, um einen langlaufenden Prozess zu simulieren. Führen Sie den folgenden Befehl aus:

    sleep 600 &

    Der sleep-Befehl pausiert für eine angegebene Anzahl von Sekunden (in diesem Fall 600 Sekunden oder 10 Minuten). Das & am Ende teilt Linux mit, diesen Befehl im Hintergrund auszuführen.

  3. Nach dem Ausführen dieses Befehls sehen Sie eine Ausgabe ähnlich dieser:

    [1] 1234

    Diese Ausgabe zeigt zwei wichtige Informationen:

    • [1] ist die Auftragsnummer (job number). Diese wird verwendet, um sich auf diesen bestimmten Hintergrundauftrag zu beziehen.
    • 1234 ist die Prozess-ID (PID). Dies ist ein eindeutiger Bezeichner für den laufenden Prozess.
  4. Sie werden feststellen, dass Sie sofort wieder die Eingabeaufforderung erhalten. Dies liegt daran, dass der Prozess im Hintergrund läuft, sodass Sie weiterhin Ihr Terminal verwenden können.

  5. Jetzt überprüfen wir den Status unseres Hintergrundauftrags:

    jobs

    Dieser Befehl listet alle aktuellen Hintergrundaufträge auf. Sie sollten eine Ausgabe wie diese sehen:

    [1]+  Running                 sleep 600 &

    Dies sagt Ihnen, dass Auftrag Nummer 1 läuft und es sich um den sleep 600-Befehl handelt, den wir gerade gestartet haben.

  6. Wichtiger Hinweis: Hintergrundaufträge sind spezifisch für die Terminalsitzung, in der sie gestartet wurden. Wenn Sie ein neues Terminalfenster oder -Tab öffnen und dort jobs ausführen, werden die Hintergrundaufträge aus Ihrem ursprünglichen Terminal nicht angezeigt. Dies ist ein Schlüsselkonzept zum Verständnis, wie Hintergrundaufträge in Linux funktionieren.

Ausführen mehrerer Hintergrundaufträge

Nachdem wir bereits einen Auftrag im Hintergrund ausgeführt haben, probieren wir es nun mit der gleichzeitigen Ausführung mehrerer Aufträge. Wir verwenden eine Mischung verschiedener Befehle, um die Vielseitigkeit von Hintergrundaufträgen zu demonstrieren.

  1. Starten wir noch ein paar weitere Hintergrundaufträge. Geben Sie diese Befehle nacheinander ein:

    ping -c 100 google.com > ping_results.txt &
    find /home -name "*.log" > log_files.txt &
    sleep 1200 &

    Jeder dieser Befehle startet einen neuen Hintergrundauftrag. Sie werden für jeden Auftrag eine Auftragsnummer und eine PID sehen.

  2. Jetzt überprüfen wir den Status aller unserer Hintergrundaufträge:

    jobs

    Sie sollten eine Ausgabe sehen, die alle vier Aufträge auflistet (einschließlich des aus Schritt 1):

    [1]   Running                 sleep 600 &
    [2]   Running                 ping -c 100 google.com > ping_results.txt &
    [3]-  Running                 find /home -name "*.log" > log_files.txt &
    [4]+  Running                 sleep 1200 &

    Das + neben Auftrag 4 zeigt an, dass dies der kürzlichste gestartete Hintergrundauftrag ist. Das - neben Auftrag 3 zeigt an, dass dieser der aktuelle Auftrag würde, wenn Auftrag 4 beendet würde.

  3. Beachten Sie, wie Sie schnell mehrere Hintergrundaufträge starten können und Ihr Terminal weiterhin für andere Befehle reagiert.

Bringt einen Hintergrundauftrag in den Vordergrund

Manchmal möchten Sie möglicherweise einen Hintergrundauftrag in den Vordergrund bringen, um mit ihm zu interagieren oder seine Ausgabe zu sehen. Lassen Sie uns lernen, wie man dies macht.

  1. Listen Sie zunächst Ihre aktuellen Aufträge auf:

    jobs

    Dies aktualisiert Ihre Ansicht über die derzeit im Hintergrund laufenden Prozesse.

  2. Wir bringen einen der langlaufenden Aufträge in den Vordergrund. Wählen Sie eine Auftragsnummer aus der Liste aus (nehmen wir an, es ist Auftrag Nummer 3, verwenden Sie jedoch die Nummer, die einem noch laufenden Auftrag in Ihrer Liste entspricht). Um ihn in den Vordergrund zu bringen, verwenden Sie den fg-Befehl gefolgt von der Auftragsnummer:

    fg %3

    Das %3 bezieht sich auf die Auftragsnummer. Das %-Symbol teilt der Shell mit, dass Sie sich auf eine Auftragsnummer und nicht auf eine Prozess-ID beziehen.

  3. Nach dem Ausführen dieses Befehls sehen Sie, dass der Befehl im Vordergrund läuft, und Ihr Terminal wird "blockiert", bis er abgeschlossen ist oder Sie ihn stoppen.

  4. Um den Auftrag zu stoppen und die Kontrolle über Ihr Terminal wieder zu erlangen, drücken Sie Ctrl+C. Dies sendet ein Unterbrechungssignal an den aktuellen Vordergrundprozess.

  5. Lassen Sie uns erneut unsere Aufträge überprüfen:

    jobs

    Sie sollten feststellen, dass der Auftrag, den Sie in den Vordergrund gebracht haben, nicht mehr aufgeführt ist, da wir ihn gestoppt haben.

Beenden eines Hintergrundauftrags

Jetzt lernen wir, wie man einen Hintergrundauftrag beendet, ohne ihn in den Vordergrund zu bringen.

  1. Listen Sie zunächst Ihre aktuellen Aufträge auf:

    jobs

    Dies zeigt Ihnen, welche Aufträge noch laufen.

  2. Wir beenden einen der verbleibenden Hintergrundaufträge. Wählen Sie eine Auftragsnummer aus der Liste aus (nehmen wir an, es ist Auftrag Nummer 2, verwenden Sie jedoch die Nummer, die einem noch laufenden Auftrag in Ihrer Liste entspricht). Um ihn zu beenden, verwenden wir den kill-Befehl gefolgt von der Auftragsnummer:

    kill %2

    Das %2 bezieht sich auf die von Ihnen gewählte Auftragsnummer. Wiederum zeigt das %-Symbol an, dass wir uns auf eine Auftragsnummer beziehen.

  3. Der kill-Befehl sendet ein Beendigungssignal an den angegebenen Auftrag. Standardmäßig sendet er ein Signal, das es dem Prozess ermöglicht, sich ordnungsgemäß herunterzufahren.

  4. Überprüfen Sie die Aufträge erneut:

    jobs

    Sie sollten feststellen, dass der Auftrag, den Sie beendet haben, nicht mehr aufgeführt ist. Dies bestätigt, dass er erfolgreich beendet wurde.

Verwenden von Hintergrundaufträgen mit anderen Befehlen

Nachdem wir mit verschiedenen Befehlen trainiert haben, probieren wir es nun mit der Verwendung von Hintergrundaufträgen in Verbindung mit einem anderen praktischen Befehl.

  1. Wir verwenden den tar-Befehl, um ein komprimiertes Archiv Ihres Home-Verzeichnisses im Hintergrund zu erstellen:

    tar -czf home_backup.tar.gz /home/labex &

    Dieser Befehl erstellt ein komprimiertes tar-Archiv Ihres Home-Verzeichnisses.

  2. Sie werden wie bei unseren vorherigen Befehlen eine Auftragsnummer und eine PID sehen.

  3. Überprüfen Sie den Status des Auftrags:

    jobs

    Sie sollten den tar-Befehl als laufenden Auftrag aufgeführt sehen.

  4. Während er läuft, können Sie weiterhin Ihr Terminal für andere Aufgaben verwenden. Dies ist die Stärke von Hintergrundaufträgen!

  5. Nach einer Weile überprüfen Sie, ob der Befehl abgeschlossen ist:

    jobs

    Wenn er nicht mehr aufgeführt ist, ist er beendet.

  6. Jetzt überprüfen wir, ob das Archiv erstellt wurde:

    ls -l home_backup.tar.gz

    Dies zeigt Ihnen die Details der Archivdatei, wenn sie erfolgreich erstellt wurde.

Zusammenfassung

In diesem Lab haben Sie essentielle Fähigkeiten zur Verwaltung von Hintergrundaufträgen in Linux gelernt:

  1. Ausführen von Befehlen im Hintergrund mit dem &-Operator
  2. Auflisten und Überwachen von Hintergrundaufträgen mit dem jobs-Befehl
  3. Bringen von Hintergrundaufträgen in den Vordergrund mit fg
  4. Beenden von Hintergrundaufträgen mit kill
  5. Anwenden dieser Konzepte auf praktische Szenarien wie Netzwerkkundgebung, Dateisuche und Archivierung

Sie haben auch ein wichtiges Konzept gelernt: Hintergrundaufträge sind spezifisch für die Terminal-Sitzung, in der sie gestartet wurden. Das bedeutet, dass jedes Terminalfenster oder -Tab seine eigene Gruppe von Hintergrundaufträgen verwaltet.

Diese Fähigkeiten werden Ihnen helfen, effizient zu multitasken in einer Linux-Umgebung, indem Sie mehrere Prozesse gleichzeitig ausführen und effektiv verwalten können. Denken Sie daran, dass Hintergrundaufträge besonders nützlich sind für langlaufende Aufgaben, die keine ständige Interaktion erfordern, und so Ihr Terminal für andere Arbeiten freigeben.