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

Nohup-Befehl mit Beispielen

Nohup steht für „no hang up“ und verhindert, wie der Name schon sagt, dass der Befehl automatisch abgebrochen wird, wenn Sie sich abmelden oder die Shell verlassen.

Wenn Sie einen Linux-Befehl ausführen und sich nach einiger Zeit von der Sitzung abmelden, wenn die Ausführung dieses Befehls noch nicht abgeschlossen ist, wird sein Prozess beendet.

Es gibt alle Arten von Programmen, die viele Stunden in Anspruch nehmen. Wir müssen nicht auf den Befehl warten, um die gesamte Aufgabe abzuschließen. Wir können Programme im Hintergrund laufen lassen, indem wir den Befehl nohup verwenden und die Ausgabe später überprüfen.

nohup-Befehlssyntax

Die Syntax des nohup-Befehls lautet:

nohup COMMAND [ARG]...

Standardmäßig wird die Ausgabe eines Befehls auf dem Standardausgabegerät angezeigt, das das Terminal ist, das den Prozess initiiert hat. Da das Terminal jedoch während der Lebensdauer des untergeordneten Prozesses geschlossen werden kann, kann das Terminal nicht mehr das Ausgabegerät sein. Laut der Infoseite des nohup-Befehls

If standard output is a terminal, the command's standard output is appended to the file `nohup.out'; if that cannot be written to, it is appended to the file `$HOME/nohup.out'; and if that cannot be written to, the command is not run. Any `nohup.out' or `$HOME/nohup.out' file created by `nohup' is made readable and writable only to the user, regardless of the current umask settings.

Ähnlich für Standardfehler,

If standard error is a terminal, it is normally redirected to the same file descriptor as the (possibly-redirected) standard output. However, if standard output is closed, standard error terminal output is instead appended to the file `nohup.out' or `$HOME/nohup.out' as above.

Dies bedeutet, dass standardmäßig sowohl die Standardausgabe als auch der Standardfehler in die Datei „nohup.out“ umgeleitet werden. Wenn Sie die Ausgabe jedoch in eine andere Datei umleiten möchten, können Sie dies jederzeit mit dem Umleitungsoperator tun. Zum Beispiel, um die Ausgabe von make abzufangen,

nohup make > make.log

Für die Standardeingabe

If standard input is a terminal, it is redirected from `/dev/null' so that terminal sessions do not mistakenly consider the terminal to be used by the command. This is a GNU extension; programs intended to be portable to non-GNU hosts should use `nohup COMMAND [ARG]...

Der Befehl nohup versetzt den Befehl nicht automatisch in den Hintergrund. Dies muss explizit mit &.

erfolgen
nohup make > make.log &

Außerdem ändert dieser Befehl nicht die Nettigkeit (d. h. die Priorität) eines Befehls. Dafür wird ein netter Befehl verwendet, wie zum Beispiel 'nohup nice COMMAND'.

Verwendung des nohup-Befehls

Wir können nohup auf zwei Arten verwenden. Zuerst wird der Befehl mit Parametern ausgeführt, ohne während der Arbeit andere Eingaben zu erhalten. Alle Ausgaben, einschließlich etwaiger Fehlermeldungen, werden in die Datei nohup.out im Arbeitsverzeichnis oder in Ihr Home-Verzeichnis geschrieben. Wenn der Befehl noch ausgeführt wird, wenn Sie sich abmelden oder das Terminal schließen, wird er nicht beendet.

Lassen Sie uns ein Beispiel mit der Memtester-Anwendung ausprobieren.

$ nohup sudo memtester 2048 5
nohup: ignoring input and appending output to 'nohup.out'
Killed

$ cat nohup.out 
memtester version 4.3.0 (64-bit)
Copyright (C) 2001-2012 Charles Cazabon.
Licensed under the GNU General Public License version 2 (only).

pagesize is 4096
pagesizemask is 0xfffffffffffff000
want 2048MB (2147483648 bytes)
got  1876MB (1968074752 bytes), trying mlock ...

Sie können die Ausgabe auch in eine andere Datei anstelle von nohup.out umleiten, indem Sie> symbol.

verwenden
$ nohup sudo memtester 2048 5 > result.txt

Verwenden Sie den nohup-Befehl mit ‘&’

Um einen Prozess zu starten und in den Hintergrund zu versetzen, führen Sie im Grunde den Befehl gefolgt vom Symbol "&" aus. Das „&“-Symbol am Ende des Befehls weist Bash an, nohup yourcommand auszuführen im Hintergrund. Es kann mit dem fg-Befehl wieder in den Vordergrund gebracht werden.

$ nohup bash sleep1.sh &
[1] 653
$ nohup: ignoring input and appending output to 'nohup.out'
fg
-bash: fg: job has terminated
[1]+  Exit 127                nohup bash sleep1.sh

Mehrere Befehle im Hintergrund ausführen

Sie können mehrere Befehle im Hintergrund ausführen, indem Sie den Befehl nohup verwenden. Im folgenden Beispiel werden mkdir-, touch- und ls-Befehle im Hintergrund ausgeführt, indem nohup- und bash-Befehle verwendet werden.

$ nohup bash -c 'mkdir TestDir && touch test2.file && ls'> output.txt
nohup: ignoring input and redirecting stderr to stdout

$ cat output.txt 
TestDir
nohup.out
output.txt
test2.file
testfile.txt

Prozess im Hintergrund starten und beenden

Wenn Sie den Ping-Befehl mit nohup ausführen, wird der Prozess nicht beendet, wenn Sie das Terminal schließen.

$ nohup ping -i 15 linoxide.com &
[1] 806
$ nohup: ignoring input and appending output to 'nohup.out'

Sie können das Terminal schließen und erneut öffnen. Führen Sie nun den pgrep-Befehl mit -a aus Option.

$ pgrep -a ping
816 ping -i 15 linoxide.com

Sie erhalten die Liste der Prozesse mit der laufenden Prozess-ID. Wie Sie sehen können, wird der Ping-Befehl, den wir ausgeführt haben, nicht beendet. Um einen Hintergrundprozess zu beenden, müssen Sie den Befehl kill ausführen. Als Parameter müssen wir die spezielle Prozess-ID verwenden, die ausgeführt wird.

In unserem Fall ist die Prozess-ID 816. Führen Sie kill 816 aus, um den Prozess zu beenden.

$ pgrep -a ping
816 ping -i 15 linoxide.com
$ kill 816

Schlussfolgerung

Nohup ist sehr hilfreich, wenn Sie Shell-Skripte ausführen müssen. Tmux, Screen und Disown sind einige der alternativen Dienstprogramme, die die gleiche Aufgabe wie nohup erfüllen.

Ich hoffe, Sie sind jetzt mit diesem Tool vertraut, das in vielen Fällen nützlich sein kann. Wenn Sie Fragen oder Kommentare haben, posten Sie diese bitte unten.


Linux
  1. wc Linux-Befehl mit Beispielen

  2. Linux-Sortierungsbefehl mit Beispielen

  3. Linux Tee-Befehl mit Beispielen

  4. Linux-Kopfbefehl mit Beispielen

  5. JQ-Befehl in Linux mit Beispielen

15 Linux-PS-Befehl mit Beispielen

Linux-CD-Befehl mit Beispielen

Linux-Uhrbefehl mit Beispielen

Nohup Linux-Befehl mit Beispielen

Linux-IP-Befehl mit Beispielen

Verlaufsbefehl mit Beispielen