nohup
fängt das Auflegesignal ab (siehe man 7 signal
), während das kaufmännische Und dies nicht tut (außer die Shell ist so konfiguriert oder sendet SIGHUP
nicht überhaupt).
Normalerweise, wenn ein Befehl mit &
ausgeführt wird und danach die Shell verlassen, beendet die Shell den Unterbefehl mit dem Hangup-Signal (kill -SIGHUP <pid>
). Dies kann mit nohup
verhindert werden , da es das Signal abfängt und ignoriert, sodass es nie die eigentliche Anwendung erreicht.
Falls Sie Bash verwenden, können Sie den Befehl shopt | grep hupon
verwenden um herauszufinden, ob Ihre Shell SIGHUP an ihre untergeordneten Prozesse sendet oder nicht. Wenn es ausgeschaltet ist, werden Prozesse nicht beendet, wie es bei Ihnen der Fall zu sein scheint. Weitere Informationen darüber, wie Bash Anwendungen beendet, finden Sie hier.
Es gibt Fälle, in denen nohup
funktioniert nicht, zum Beispiel wenn der von Ihnen gestartete Prozess die SIGHUP
wieder verbindet Signal, wie es hier der Fall ist.
myprocess.out &
würde den Prozess mit einer Subshell im Hintergrund ausführen. Wenn die aktuelle Shell beendet wird (z. B. durch Abmelden), werden alle Subshells ebenfalls beendet, sodass der Hintergrundprozess ebenfalls beendet wird. Der Befehl nohup ignoriert den HUP
Signal und damit auch wenn die aktuelle Shell beendet wird, die Subshell und myprocess.out
im Hintergrund weiterlaufen würde. Ein weiterer Unterschied besteht darin, dass &
allein leitet stdout/stderr nicht um. Wenn also eine Ausgabe oder ein Fehler auftritt, werden diese auf dem Terminal angezeigt. nohup hingegen leitet stdout/stderr auf nohup.out
um oder $HOME/nohup.out
.
Meistens melden wir uns mit ssh beim Remote-Server an. Wenn Sie ein Shell-Skript starten und sich abmelden, wird der Prozess beendet. Nohup hilft dabei, das Skript im Hintergrund weiter auszuführen, auch nachdem Sie sich von der Shell abgemeldet haben.
Nohup command name &
eg: nohup sh script.sh &
Nohup fängt die HUP-Signale ab. Nohup stellt den Job nicht automatisch in den Hintergrund. Das müssen wir explizit mit &
mitteilen