Eine kurze Analyse der Beispiele und Unterschiede bei der Verwendung von nohup und screen zum Ausführen von Hintergrundaufgaben in Linux

Eine kurze Analyse der Beispiele und Unterschiede bei der Verwendung von nohup und screen zum Ausführen von Hintergrundaufgaben in Linux

Die Verwendung eines SSH-Terminals (z. B. Putty, Xshell) zum Herstellen einer Verbindung mit einem Linux-Server zum Ausführen zeitaufwändiger Aufgaben kann mehrere Stunden oder sogar Tage dauern. Zu diesem Zeitpunkt ist das Terminal belegt und wir haben noch andere Aufgaben zu erledigen. Daher müssen wir diese Art zeitaufwändiger Aufgaben in den Hintergrund stellen, damit sie ausgeführt werden können. Wir müssen nur die Protokolle aufzeichnen. Es gibt die folgenden gängigen Methoden, um diese Anforderung zu erfüllen.

Befehl &

Geben Sie den Befehl & in das Terminal ein, um ihn auszuführen. Zu diesem Zeitpunkt ist die Verwendung von Strg + C zum Beenden des Befehls ungültig, da das Programm gegen das SIGINT1-Signal von & im Hintergrund immun ist und weiter ausgeführt wird. Wenn Sie das Terminal jedoch direkt schließen, wird der Vorgang beendet. Es ist ersichtlich, dass der im Hintergrund ausgeführte Prozess mit & durch das Signal SIGHUP2 beendet wird. Wenn Sie das Terminal jedoch normal mit dem Befehl exit verlassen, wird das Programm im Hintergrund weiter ausgeführt und nicht beendet.

nohup-Befehl

Standardmäßig wird die Standardausgabe an nohup.out im aktuellen Verzeichnis angehängt. Wenn die Datei nohup.out im aktuellen Verzeichnis nicht beschreibbar ist, wird die Ausgabe in die Datei $HOME/nohup.out umgeleitet.

Dann fällt es uns leicht, diese beiden Funktionen zu kombinieren und den Befehl wie folgt auszuführen:

nohup command > /home/user/myfile.log 2>&1 &

Dadurch wird die Aufgabe im Hintergrund ausgeführt, bis sie abgeschlossen ist. Die Standardausgabe (1) und die Standardfehlermeldung (2) des Programms werden in die Datei /home/user/myfile.log geschrieben.

Bildschirm-Tool

Der Bildschirm kann als Sitzungsfensterverwaltungstool verstanden werden. Für den allgemeinen Gebrauch müssen wir nur die folgenden Vorgänge ausführen:

# Bildschirm mit yum installieren
Yum-Installationsbildschirm
# Erstellen Sie ein Sitzungsfenster mit dem Namen „Testbildschirm -S Test“
# Fenster vorübergehend verlassen Strg+ad (Strg gedrückt halten und nacheinander a, d drücken)
# Vorhandenen Sitzungsfenster-Bildschirm anzeigen -ls
# Rufen Sie das Fenster screen -r test auf
screen -r Prozess-ID
# Schließen Sie das Fenster exit
# Fensterwechsel Strg+ac: Erstellt ein Fenster in der aktuellen Bildschirmsitzung Strg+aw: Fensterliste Strg+an: Nächstes Fenster Strg+ap: Vorheriges Fenster Strg+a 0-9: Wechselt zwischen dem 0. und dem 9. Fenster

Mit dem Bildschirmtool können wir ein Fenster auf dem Terminal erstellen, die erforderlichen Befehle ausführen, es dann vorübergehend verlassen und dann mit anderen Dingen fortfahren. Natürlich können Sie auch andere Terminals verwenden, um eine Verbindung zum Server herzustellen, und den Befehl screen -r verwenden, um eine Verbindung zum erforderlichen Fenster herzustellen. Sie werden feststellen, dass das Programm immer ausgeführt wird und das Verlassen des Terminals keine Auswirkungen auf die Programme hat, die auf diesen vorübergehend verlassenen Terminals ausgeführt werden.

prüfen:

Wir schreiben ein Testskript test.sh:

#!/bin/sh
für ((i=1; i<1000; i++))
Tun
  d=`Datum '+%Y-%m-%d %H:%M:%S'`
  echo "$d $ith-Ausgabe;"
  tt
  2 Sekunden schlafen
Erledigt
Schlag

Verwenden Sie einfach &, um es im Hintergrund auszuführen:

[root@localhost test.cc]# ./test.sh > test.log 2>&1 &
[1] 15037
[root@localhost test.cc]# ps -aux | grep test.sh
root 15037 0,0 0,0 113180 1424 Punkte/0 S 16:10 0:00 /bin/sh ./test.sh
root 15045 0,0 0,0 112712 992 Punkte/0 S+ 16:10 0:00 grep --color=auto test.sh
Schlag

Sie können sehen, dass 15037 Prozesse ausgeführt werden;

Wenn Sie das Terminal direkt schließen, wird die Protokollierung beendet, was darauf hinweist, dass die Ausführung des Prozesses beendet wird, wenn die Terminalsitzung endet.

Nach wiederholten Tests habe ich jedoch festgestellt, dass, wenn ich den Befehl exit verwende, um das Terminal normal zu verlassen, und mich dann erneut mit dem Terminal verbinde, das mit & ausgeführte Programm weiter ausgeführt wird, d. h. der Befehl & hat denselben Effekt wie nohup. Die Testumgebung, die ich hier verwende, ist CentOS7.6.

Verwenden Sie „nohup“ und führen Sie aus

[root@localhost test.cc]# nohup ./test.sh > test.log 2>&1 &
[1] 14349

Testergebnisse: Schließen Sie das Terminal direkt oder beenden Sie das Terminal mit dem Befehl „exit“. Das Programm wird weiterhin ausgeführt.

Ausführen über den Bildschirm

# Fensterbildschirm erstellen -S Test
# Führen Sie den Befehl aus. Das & am Ende ist nicht erforderlich, aber das Programm belegt das Fenster./test.sh > test.log 2>&1 &
# Vorübergehend Strg + Anzeige verlassen

Zu diesem Zeitpunkt können Sie das Terminal direkt schließen und dann erneut verbinden. Sie werden feststellen, dass das Programm noch läuft. So finden Sie die Fensterverbindung:

# Vorhandenes Fenster [root@localhost ~]# screen -ls
Es gibt einen Bildschirm auf:
  18048.test (getrennt)
1 Socket in /var/run/screen/S-root.
# Öffnen Sie das Fenster [root@localhost ~]# screen -r test

Nach dem Eingeben werden Sie feststellen, dass das Fenster immer noch den Status vor dem Verlassen beibehält, einschließlich der zuvor eingegebenen Programme und Befehle. Wenn Sie den Befehl exit in das Fenster eingeben, um das Fenster zu verlassen, wird das Programm beendet, wenn Sie nach dem vorherigen Befehl nicht & verwenden, da dies im Vergleich zum Testfenster ein Vordergrundprogramm ist und das Programm natürlich beendet wird, wenn das Fenster verlassen wird.

Aufgrund der temporären Trennfunktion des Bildschirms kann das Vordergrundprogramm im temporären Trennfenster weiter ausgeführt werden. Verglichen mit einem realen Terminal entspricht dies der Ausführung im Hintergrund.

Das Signal zur Programmbeendigung (Unterbrechung), das ausgegeben wird, wenn der Benutzer das Zeichen INTR eingibt (normalerweise Strg-C), wird verwendet, um die Vordergrundprozessgruppe zu benachrichtigen, dass der Prozess beendet werden soll ↩︎

Wird gesendet, wenn die Terminalverbindung endet, normalerweise um das Terminal zu schließen und jede Prozessgruppe in derselben Sitzung zu benachrichtigen ↩︎

Zusammenfassen

Oben ist das vom Herausgeber vorgestellte Beispiel und der Unterschied bei der Verwendung von nohup und screen zum Ausführen von Hintergrundaufgaben in Linux. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Herausgeber wird Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken!
Wenn Sie diesen Artikel hilfreich finden, können Sie ihn gerne abdrucken und dabei bitte die Quelle angeben. Vielen Dank!

Das könnte Sie auch interessieren:
  • So installieren Sie Redis unter Linux, führen es im Hintergrund aus und richten das System für den automatischen Start ein
  • Verschiedene Möglichkeiten der Ausführung im Hintergrund von Linux (Zusammenfassung)
  • So zeigen Sie im Hintergrund laufende Programme in Linux an und schließen sie
  • Linux nohup, um Programme im Hintergrund auszuführen und anzuzeigen (nohup und &)
  • So starten Sie ein JAR-Paket und führen es unter Linux im Hintergrund aus
  • So zeigen Sie laufende Hintergrundprogramme in Linux an und beenden sie
  • Mehrere Möglichkeiten, Python-Programme im Linux-Hintergrund auszuführen
  • So führen Sie Springboot im Hintergrund von Linux aus
  • Linux-Hintergrund, in dem die Befehlsmethode „Node Service“ ausgeführt wird
  • Lösen Sie das Problem der im Hintergrund laufenden Python-Nohup-Linux-Ausgabe
  • Zusammenfassung der Methoden zum zuverlässigen Ausführen von Prozessen im Hintergrund unter Linux
  • Detaillierte Erläuterung des Linux-Hintergrundbetriebs und -Herunterfahrens, Anzeige von Hintergrundaufgaben
  • So führen Sie Linux-Befehle im Hintergrund aus

<<:  Installations-Tutorial zur komprimierten Version von MySQL 8.0.11

>>:  Galeriefunktion durch natives Js implementiert

Artikel empfehlen

So verwenden Sie die Shell, um Batchvorgänge auf mehreren Servern auszuführen

Inhaltsverzeichnis SSH-Protokoll SSH Verbindungsp...

Seltsame und interessante Docker-Befehle, die Sie vielleicht nicht kennen

Einleitung Stellt einige einfache und praktische ...

Rendern im Vue-Scaffolding verstehen

Im Vue-Gerüst können wir sehen, dass im neuen Vue...

Mehrere gängige Methoden zum Festlegen der Ankerpositionierung in HTML

Mir sind mehrere Möglichkeiten bekannt, die Ankerp...

Detaillierte Erläuterung des Beispiels einer MySQL-Einzeltabellenabfrage

1. Daten vorbereiten Die folgenden Operationen we...

Details zur Verwendung des Vue-Slots

Inhaltsverzeichnis 1. Warum Slots verwenden? 1.1 ...

Detaillierte Erklärung der grep- und egrep-Befehle in Linux

Vertreter / egrep Syntax: grep [-cinvABC] 'wo...

Vue implementiert nahtloses Scrollen von Listen

In diesem Artikelbeispiel wird der spezifische Co...

XHTML-Erste-Schritte-Tutorial: Verwenden des Frame-Tags

<br />Durch die Frame-Struktur ist die gleic...

Grundlegendes zu MySQL-Sperren basierend auf Update-SQL-Anweisungen

Vorwort Die MySQL-Datenbanksperre ist ein wichtig...