GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Mit dem Nohup-Befehl unter Linux können Sie Befehle auch nach dem Abmelden ausführen

Nohup steht für „no hang up“. Es ist ein äußerst nützlicher Befehl, um Ihren Prozess auch nach dem Abmelden auszuführen.

Eine der häufigsten Anwendungen findet sich in der Ausführung zeitraubender Befehle über eine SSH-Verbindung. Wenn Sie glauben, dass Ihre SSH-Sitzung unterbrochen werden könnte, können Sie den Befehl mit nohup auf diese Weise verwenden:

nohup your_command &

Was ist der nohup-Befehl?

Nohup kann als Wrapper angesehen werden. Sie stellen Ihrem Befehl nohup voran so:

nohup COMMAND ARGS ....

Nohup Der Zweck besteht darin, SIGHUP abzufangen und zu verhindern Signale vom Erreichen von COMMAND .

Wenn Sie Ihrem Befehl nohup voranstellen , wird die Eingabe von einer nicht lesbaren Datei umgeleitet ( nohup COMMAND ). Einfach gesagt, rufen Sie einen Befehl nicht mit nohup auf wenn Sie Eingaben an diesen Befehl senden müssen. Wenn Sie nohup B. ein Befehl, muss er unbeaufsichtigt ausgeführt werden können.

Nohup wird zuerst versuchen, die Ausgabe in ./nohup.out umzuleiten oder sendet es an ~/nohup.out wenn nötig. Sie können auch wie folgt entscheiden, wohin die Ausgabe umgeleitet werden soll:

nohup COMMANDS >/path/to/output/file

Über nohup gibt es nicht viel zu sagen , es hat keine lange Liste von Optionen. Es gibt nur –Hilfe und –Version .

Beispiel für die Verwendung des nohup-Befehls

So einfach ist das Ausführen eines Skripts mit nohup.

nohup ./nhp.sh

Beachten Sie, dass nohup hat den Prozess nicht in den Hintergrund gegabelt. Nohup ist nur da, um SIGHUP abzufangen Signale. Sobald der Befehl ausgeführt wird, können Sie fortfahren und Ihr Terminal schließen. Es wird Sie warnen, dass ein Prozess ausgeführt wird. Bestätigen Sie, dass Sie es töten möchten.

Als Sie Ihr Terminal geschlossen haben, haben alle untergeordneten Prozesse ein SIGHUP-Signal erhalten. Nohup verhinderte, dass dieses Signal mein Kommando erreichte. Das folgende Bild zeigt Prozessinformationen zu meinem Befehl, während das Terminal noch lief.

Siehst du die PPID? Das ist die übergeordnete Prozess-ID. Als Sie das Schließen des Terminals angefordert haben, haben alle Kinder von PPID ein SIGHUP erhalten Signal. Nohup verhindert, dass dieses Signal unser Skript erreicht. Der übergeordnete Prozess wurde beendet und unser Skript wurde verwaist. Wenn ein Prozess verwaist, erhält er automatisch die Zuweisung 1 (systemd oder init) als übergeordnetes Element.

Wie Sie sehen können, ist es wirklich nicht schwer, die Verwendung von nohup zu demonstrieren . Sehr einfacher Befehl. Sie können den Prozess im Hintergrund wie folgt forken:

nohup ./nhp.sh &

Sie können auch so entscheiden, wohin die Ausgabe umgeleitet wird:

nohup ./nhp.sh >/path/to/file &

Beachten Sie, dass beim Herunterfahren oder Neustarten des Linux-Systems der Befehl beendet wird. Wenn Sie ein Herunterfahren oder einen Neustart anfordern, erhalten alle Prozesse ein SIGTERM und dann ein SIGKILL . Diese Signale werden von nohup nicht abgefangen .

Nohup über SSH-Verbindung

Eine Verwendung, die Ihnen oft sofort in den Sinn kommt, wenn Sie nohup lernen soll in der Lage sein, einen Prozess auf einem entfernten Computer über SSH zu starten. Logischerweise wird ein Befehl mit nohup ausgeführt würde es Ihnen ermöglichen, sich von Ihrer SSH-Verbindung abzumelden, und der Prozess würde weiterhin ausgeführt.

nohup COMMAND &

Ein häufiges Problem ist, dass SSH beim Abmelden manchmal „hängt“. Dies liegt daran, dass SSH sich oft weigert, Datenströme zu und von Hintergrundprozessen zu verlieren. Es bleibt dann „hängen“, bis der Prozess beendet wird.

Dieses Problem kann oft behoben werden, indem alle 3 Datenströme umgeleitet werden.

nohup COMMAND >./nohup.out 2>./nohup.err &

Ich hoffe, dieser kurze Artikel hat Ihnen geholfen, SSH-Sitzungen besser zu nutzen. Wenn Sie Fragen oder Anregungen haben, hinterlassen Sie bitte unten einen Kommentar.


Linux
  1. 10 erstaunliche und mysteriöse Verwendungen von (!) Symbolen oder Operatoren in Linux-Befehlen

  2. Linux-Echo-Befehl

  3. 10 tödliche Befehle, die Sie niemals unter Linux ausführen sollten

  4. Linux:Befehl so planen, dass er einmal nach dem Neustart ausgeführt wird (RunOnce-Äquivalent)

  5. Wie kann man nohup verwenden, um einen Befehl nach der Benutzerabmeldung weiter auszuführen?

So führen Sie mehrere Linux-Befehle in einem einzigen Befehl aus

3 Linux-Befehle, die Sie vergessen haben

So führen Sie mehrere Linux-Befehle gleichzeitig im Linux-Terminal aus

20 Haupt-Linux-Befehle, die Sie täglich benötigen

Nohup-Befehl unter Linux

Top 50+ Linux-Befehle, die Sie kennen MÜSSEN