So verwenden Sie den Befehl nohup unter Linux

PHPz
Freigeben: 2023-05-12 08:52:10
nach vorne
3807 Leute haben es durchsucht

Was ist nohup

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命令的基本语法如下:

nohup COMMAND [ARGS ...] [> output-file 2> error-file] &
Nach dem Login kopieren

其中的参数含义如下:

  • COMMAND:需要在后台运行的命令或脚本。

  • ARGS:命令或脚本的参数。

  • > output-file:输出重定向到指定的文件中。

  • 2> error-file:错误信息重定向到指定的文件中。

  • &:将命令放在后台运行。

nohup命令的执行过程分为以下几个步骤:

  • nohup命令将当前shell的标准输入、标准输出和标准错误输出全部重定向到/dev/null设备中,避免被关闭终端的信号所中断。

  • nohup命令将进程放到后台执行,并将进程的PID输出到终端。

  • 进程开始执行,并将标准输出和标准错误输出重定向到指定的文件中。

  • 用户可以退出终端或关闭终端窗口,进程仍然在后台运行。

nohup使用方法

使用nohup命令非常简单,按照上面的基本语法即可。以下是一些nohup命令的用法示例:

后台运行命令

要在后台运行命令,只需要在命令行中输入以下命令即可:

nohup COMMAND &
Nach dem Login kopieren

例如,在后台运行一个Bash脚本:

nohup bash test.sh &
Nach dem Login kopieren

标准输出重定向到文件

nohup bash test.sh > stdout.txt &
Nach dem Login kopieren

标准错误输出重定向到文件

nohup bash test.sh 2> stderr.txt &
Nach dem Login kopieren

将标准输出和标准错误输出都重定向到文件

1. 重定向到同一文件

nohup bash test.sh > output.txt 2>&1 &
Nach dem Login kopieren

2. 重定向到不同文件

nohup bash test.sh > stdout.txt 2> stderr.txt &
Nach dem Login kopieren

3. 一个更为复杂的例子,重定向标准输入(stdin):

nohup ./myprogram > foo.out 2> foo.err < /dev/null &
Nach dem Login kopieren

这里多出来一个< /dev/null,意思是将标准输入重定向到/dev/null,以确保程序不会从标准输入中读取任何数据。

这个是为了解决一个实际问题:SSH会话常常拒绝注销(或者挂起),因为它不愿意去丢失与后台job(s)进行交互的数据。当遇到这个问题的时候,可以使用上面的命令,通过三次重定向来解决。

nohup后台进程管理

使用 jobs 命令可以查看当前 shell 中后台运行的任务列表,包括任务编号、状态和命令。

例如,我们在后台执行一个sleep 1000命令,使用jobs命令查看:

$ jobs
[1]+  Running                 nohup sleep 1000 &
Nach dem Login kopieren

其中,方括号中的数字表示任务编号,加号或减号表示任务的优先级,Running 表示任务正在后台运行。除此之外,还有其他可能的状态,包括 Stopped(已停止)、Done(已完成)等。

我们还可以使用 fg 命令将一个后台任务移动到前台继续运行,例如:

$ fg %1
Nach dem Login kopieren

这个命令会将任务编号为 1 的任务移动到前台,继续执行。如果希望将任务暂停或恢复,可以使用 Ctrl-Z 键,在当前 shell 中发送 SIGTSTP 信号。

$ fg %1
nohup sleep 1000

^Z
[1]+  Stopped                 nohup sleep 1000
Nach dem Login kopieren

此时如果想要恢复运行,可以使用bg命令:

$ bg %1
[1]+ nohup sleep 1000 &
Nach dem Login kopieren

如果想要杀死该任务,可以使用kill命令:

$ kill %1
[1]+  Terminated              nohup sleep 1000
Nach dem Login kopieren

如果你想杀死所有后台任务,但是又觉得一个个地比较麻烦,可以使用disown命令来解决:

$ disown -a
Nach dem Login kopieren

这个命令可以杀死所有后台任务,但不会有任何提示,你可以通过jobs

nohup-Syntaxregeln#🎜🎜##🎜🎜#Die grundlegende Syntax des nohup-Befehls lautet wie folgt: #🎜🎜#rrreee#🎜🎜#Die Bedeutung der Parameter ist wie folgt: #🎜 🎜#
  • #🎜🎜#BEFEHL: Ein Befehl oder Skript, das im Hintergrund ausgeführt werden muss. #🎜🎜#
  • #🎜🎜#ARGS: Parameter eines Befehls oder Skripts. #🎜🎜#
  • #🎜🎜#> 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. #🎜🎜#
#🎜🎜#Der Ausführungsprozess des Nohup-Befehls ist in die folgenden Schritte unterteilt: #🎜🎜#
  • # 🎜🎜 Der Befehl #nohup leitet alle Standardeingaben, Standardausgaben und Standardfehlerausgaben der aktuellen Shell an das Gerät /dev/null um, um eine Unterbrechung durch ein Signal zum Schließen des Terminals zu vermeiden. #🎜🎜#
  • #🎜🎜#Der Befehl nohup stellt den Prozess zur Ausführung in den Hintergrund und gibt die PID des Prozesses an das Terminal aus. #🎜🎜#
  • #🎜🎜#Der Prozess startet die Ausführung und leitet die Standardausgabe und die Standardfehlerausgabe in die angegebene Datei um. #🎜🎜#
  • #🎜🎜#Benutzer können das Terminal verlassen oder das Terminalfenster schließen, und der Prozess läuft weiterhin im Hintergrund. #🎜🎜#
#🎜🎜#nohup-Verwendungsmethode#🎜🎜##🎜🎜#Die Verwendung des nohup-Befehls ist sehr einfach. Befolgen Sie einfach die obige grundlegende Syntax. Hier sind einige Anwendungsbeispiele des Befehls nohup: #🎜🎜#

Befehl im Hintergrund ausführen

#🎜🎜#Um einen Befehl im Hintergrund auszuführen, geben Sie einfach den folgenden Befehl in die Befehlszeile ein: #🎜 🎜#rrreee #🎜🎜#Um beispielsweise ein Bash-Skript im Hintergrund auszuführen: #🎜🎜#rrreee

Standardausgabe wird in eine Datei umgeleitet

rrreee

Standardfehlerausgabe wird in eine Datei umgeleitet

rrreee

Leiten Sie sowohl die Standardausgabe als auch die Standardfehlerausgabe in eine Datei um.

#🎜🎜#1 In dieselbe Datei umleiten#🎜🎜#rrreee#🎜🎜#2 #🎜🎜#rrreee#🎜 🎜#3. Ein komplexeres Beispiel, die Standardeingabe umleiten (stdin): #🎜🎜#rrreee#🎜🎜#Es gibt einen zusätzlichen < 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. #🎜🎜#

nohup Hintergrundprozessverwaltung

#🎜🎜#Verwenden Sie den Befehl 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!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!