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. cd
Shell-Funktionen, lösen normalerweise keinen neuen Prozess aus. type cmd
In der Regel erfahren Sie, ob cmd
es sich um einen externen Befehl oder eine Shell-Funktion handelt. type type
sagt dir, dass es type
sich um eine Shell-Funktion handelt.
nohup
ist 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 emacs
Fenster getötet wird, obwohl es im Hintergrund ausgeführt wird. Dies ist das Standardverhalten und nohup
wird 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
. nohup
tut.
nohup
tut. Welchen Teil hast du verwirrt?