linux - start - Was ist der Unterschied zwischen Nohup und Ampersand?




open firefox in linux (4)

Beide nohup myprocess.out & myprocess.out & set myprocess.out im Hintergrund ausgeführt werden. Nachdem ich das Terminal heruntergefahren habe, läuft der Prozess noch. Was ist der Unterschied zwischen ihnen?


Der nohup-Befehl ist ein Signalmaskierungsdienstprogramm und fängt das Aufhängungssignal ab. Wo als kaufmännisches Und fängt die Aufhängungssignale nicht auf. Die Shell beendet den Unterbefehl mit dem Auflegen-Signal, wenn Sie einen Befehl mit & ausführen und die Shell verlassen. Dies kann durch Verwendung von nohup verhindert werden, da es das Signal abfängt. Nohup-Befehl akzeptiert Hang-Up-Signal, das vom Kernel an einen Prozess gesendet und blockiert werden kann. Der Nohup-Befehl ist hilfreich, wenn ein Benutzer eine lange Anwendung starten oder sich das Fenster schließen möchte, in dem der Prozess initiiert wurde. Normalerweise fordert eine dieser Aktionen den Kernel auf, die Anwendung zu beenden, aber ein Nohup-Wrapper lässt den Prozess weiterlaufen. Wenn Sie das kaufmännische Und-Zeichen verwenden, wird der Befehl in einem untergeordneten Prozess und diesem Kind der aktuellen Bash-Sitzung ausgeführt. Wenn Sie die Sitzung beenden, werden alle untergeordneten Prozesse dieses Prozesses gelöscht. Das kaufmännische Und bezieht sich auf die Jobsteuerung für die aktive Shell. Dies ist nützlich, um einen Prozess in einer Sitzung im Hintergrund auszuführen.


Die meiste Zeit melden wir uns mit ssh auf dem entfernten Server an. Wenn Sie ein Shell-Skript starten und sich abmelden, wird der Prozess beendet. Nohup hilft, das Skript im Hintergrund weiter auszuführen, auch nachdem Sie sich aus der Shell ausgeloggt 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


Wenn Sie das kaufmännische Und-Zeichen (&) verwenden, wird der Befehl in einem untergeordneten Prozess ausgeführt (untergeordnet zur aktuellen Bash-Sitzung). Wenn Sie jedoch die Sitzung beenden, werden alle untergeordneten Prozesse beendet.

Die Verwendung von nohup + kaufmännisches Und (&) wird dasselbe tun, außer dass beim Beenden der Sitzung der Elternteil des Kindprozesses in "1" geändert wird, was der "init" -Prozess ist, wodurch verhindert wird, dass das Kind getötet wird.


myprocess.out & würde den Prozess im Hintergrund mit einer Subshell ausführen. Wenn die aktuelle Shell beendet wird (zum Beispiel durch Abmelden), werden auch alle Subshells beendet, so dass auch der Hintergrundprozess beendet wird. Der Befehl nohup ignoriert das HUP Signal, und selbst wenn die aktuelle Shell beendet wird, laufen die Subshell und die myprocess.out im Hintergrund weiter. Ein weiterer Unterschied ist, dass & alone das stdout / stderr nicht umleitet. Wenn also Ausgaben oder Fehler auftreten, werden diese auf dem Terminal angezeigt. nohup hingegen leitet den stdout / stderr zu nohup.out oder $ HOME / nohup.out um.





nohup