Heim > Artikel > Betrieb und Instandhaltung > So verwenden Sie den Befehl nohup unter Linux
nohup
ist ein Befehl in Linux- und Unix-Systemen. Seine Funktion besteht darin, den Prozess im Hintergrund weiterlaufen zu lassen, wenn das Terminal beendet wird. Der vollständige Name lautet „no hang up“, was „kein Auflegen“ bedeutet. Mit dem Befehl nohup
können Sie weiterhin Befehle ausführen, nachdem Sie das Terminal verlassen oder die SSH-Verbindung geschlossen haben. nohup
是Linux和Unix系统中的一个命令,其作用是在终端退出时,让进程在后台继续运行。它的全称为“no hang up”,意为“不挂起”。nohup
命令可以让你在退出终端或关闭SSH连接后继续运行命令。
nohup命令的基本语法如下:
nohup COMMAND [ARGS ...] [> output-file 2> error-file] &
其中的参数含义如下:
COMMAND
:需要在后台运行的命令或脚本。
ARGS
:命令或脚本的参数。
> output-file
:输出重定向到指定的文件中。
2> error-file
:错误信息重定向到指定的文件中。
&
:将命令放在后台运行。
nohup命令的执行过程分为以下几个步骤:
nohup命令将当前shell的标准输入、标准输出和标准错误输出全部重定向到/dev/null
设备中,避免被关闭终端的信号所中断。
nohup命令将进程放到后台执行,并将进程的PID输出到终端。
进程开始执行,并将标准输出和标准错误输出重定向到指定的文件中。
用户可以退出终端或关闭终端窗口,进程仍然在后台运行。
使用nohup命令非常简单,按照上面的基本语法即可。以下是一些nohup命令的用法示例:
要在后台运行命令,只需要在命令行中输入以下命令即可:
nohup COMMAND &
例如,在后台运行一个Bash脚本:
nohup bash test.sh &
nohup bash test.sh > stdout.txt &
nohup bash test.sh 2> stderr.txt &
1. 重定向到同一文件
nohup bash test.sh > output.txt 2>&1 &
2. 重定向到不同文件
nohup bash test.sh > stdout.txt 2> stderr.txt &
3. 一个更为复杂的例子,重定向标准输入(stdin):
nohup ./myprogram > foo.out 2> foo.err < /dev/null &
这里多出来一个f62490afdab35b5cc2a4d5cc181f10c7 Ausgabedatei
: Die Ausgabe wird in die angegebene Datei umgeleitet. #🎜🎜#
2> error-file
: Die Fehlermeldung wird in die angegebene Datei umgeleitet. #🎜🎜#&
: Führen Sie den Befehl im Hintergrund aus. #🎜🎜#/dev/null
um, um eine Unterbrechung durch ein Signal zum Schließen des Terminals zu vermeiden. #🎜🎜#< Das bedeutet, dass die Standardeingabe nach <code>/dev/null
umgeleitet wird, um sicherzustellen, dass das Programm keine Daten aus der Standardeingabe liest. #🎜🎜##🎜🎜#Hiermit soll ein praktisches Problem gelöst werden: Eine SSH-Sitzung weigert sich häufig, sich abzumelden (oder hängt), weil sie nicht bereit ist, die Daten zu verlieren, die mit dem/den Hintergrundjob(s) interagieren. Wenn dieses Problem auftritt, können Sie es mit dem obigen Befehl lösen, indem Sie dreimal umleiten. #🎜🎜#jobs
, um die Liste der Aufgaben anzuzeigen, die im Hintergrund in der aktuellen Shell ausgeführt werden, einschließlich Aufgabennummern und Status und Befehle. #🎜🎜##🎜🎜#Zum Beispiel führen wir einen sleep 1000
-Befehl im Hintergrund aus und verwenden den jobs
-Befehl, um Folgendes anzuzeigen: #🎜🎜#rrreee#🎜🎜 #Wo, Quadrat Die Zahl in Klammern gibt die Aufgabennummer an, das Plus- oder Minuszeichen gibt die Priorität der Aufgabe an und Running
gibt an, dass die Aufgabe im Hintergrund ausgeführt wird. Darüber hinaus gibt es weitere mögliche Zustände, darunter Stopped
(gestoppt), Done
(abgeschlossen) usw. #🎜🎜##🎜🎜#Wir können auch den Befehl fg
verwenden, um eine Hintergrundaufgabe in den Vordergrund zu verschieben, um sie weiter auszuführen, zum Beispiel: #🎜🎜#rrreee#🎜🎜#Dieser Befehl nummeriert die Aufgabe 1 Die Aufgabe wird in den Vordergrund gerückt und die Ausführung wird fortgesetzt. Wenn Sie eine Aufgabe anhalten oder fortsetzen möchten, können Sie mit den Tasten Strg-Z
das Signal SIGTSTP
in der aktuellen Shell senden. #🎜🎜#rrreee#🎜🎜#Wenn Sie den Betrieb zu diesem Zeitpunkt wieder aufnehmen möchten, können Sie den Befehl bg
verwenden: #🎜🎜#rrreee#🎜🎜#Wenn Sie die Aufgabe beenden möchten, Sie können den Befehl kill
verwenden: #🎜🎜#rrreee#🎜🎜#Wenn Sie alle Hintergrundaufgaben beenden möchten, es aber mühsam finden, sie einzeln auszuführen, können Sie den Befehl disown verwenden
-Befehl zur Lösung des Problems: # 🎜🎜#rrreee#🎜🎜#Dieser Befehl kann alle Hintergrundaufgaben beenden, es erfolgt jedoch keine Eingabeaufforderung. Sie können dies mit dem Befehl jobs
bestätigen. #🎜🎜#Das obige ist der detaillierte Inhalt vonSo verwenden Sie den Befehl nohup unter Linux. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!