Zuallererst wird jedes Mal, wenn Sie einen Befehl ausführen, ein neuer Prozess ausgelöst, unabhängig davon, ob Sie ihn ausführen &oder nicht. &bedeutet nur, dass Sie es im Hintergrund ausführen.
Beachten Sie, dass dies nicht sehr genau ist. Einige Befehle, wie z. B. cdShell-Funktionen, lösen normalerweise keinen neuen Prozess aus. type cmdIn der Regel erfahren Sie, ob cmdes sich um einen externen Befehl oder eine Shell-Funktion handelt. type typesagt dir, dass es typesich um eine Shell-Funktion handelt.
nohupist etwas anderes. Es weist den neuen Prozess an, zu ignorieren SIGHUP. Dies ist das Signal, das vom Kernel gesendet wird, wenn die übergeordnete Shell geschlossen wird.
Um Ihre Frage zu beantworten, gehen Sie wie folgt vor:
- run
emacs & (sollte standardmäßig in einem separaten X-Fenster ausgeführt werden) .
- Führen Sie auf der übergeordneten Shell aus
exit.
Sie werden feststellen, dass das emacsFenster getötet wird, obwohl es im Hintergrund ausgeführt wird. Dies ist das Standardverhalten und nohupwird genau verwendet, um dies zu ändern.
Das Ausführen eines Jobs im Hintergrund (mit &oder bg, ich wette, andere Shells haben auch andere Syntaxen) ist eine Shell-Funktion, die sich aus der Multitasking-Fähigkeit moderner Systeme ergibt. Anstatt eine neue Shell - Instanz für jedes Programm von Forking Sie starten möchten, moderne Schalen ( bash, zsh, ksh, ...) haben die Möglichkeit , eine Liste von Programmen (oder zu verwalten Jobs ). Es kann immer nur einer von ihnen im Vordergrund sein , was bedeutet, dass er den Shell-Fokus erhält. Ich wünschte, jemand könnte die Unterschiede zwischen einem Prozess im Vordergrund und einem im Hintergrund (der Hauptzugriff auf stdin/ stdout) näher erläutern .
In jedem Fall hat dies keinen Einfluss darauf, wie der untergeordnete Prozess reagiert SIGHUP. nohuptut.
nohuptut. Welchen Teil hast du verwirrt?