Was bedeutet das kaufmännische Und (&) mit "nohup"?

11

&Ich habe unzählige Beispiele gesehen, bei denen a dem Ende einer Befehlszeichenfolge folgt, aber ich kann anscheinend keine Erklärung dafür finden, was es tut. Es ist nicht einmal auf nohupder manSeite. Ist das eine Muschelsache?

Entweder mit &oder nicht, ich finde, dass jeder Prozess, mit nohupdem ausgeführt wird, Immunität gegen jedes Hangup-Signal zu zeigen scheint.

Chad Harrison
quelle
1
"Ich finde, dass jeder Prozess, der mit nohup ausgeführt wird, Immunität gegen jedes Auflegesignal zu zeigen scheint." Dafür ist nohup da.
Samuel Edwin Ward
Ok, lassen Sie mich das klarstellen: Die einzigen Beispiele, die ich gesehen habe, verwenden die &, daher war ich mir nicht sicher, ob &es eine Art Modifikator oder Argumentation gab, die dazu führte, dass sich das nohupVerhalten anders verhält.
Chad Harrison
1
Das ist vernünftig zu vermuten. Tatsächlich ändert es nicht das Verhalten von nohup (nohup sieht es nicht einmal), sondern das Verhalten der Shell.
Samuel Edwin Ward
nohup & -> Kein Auflegen und Hintergrund. Aus der guten alten Zeit der Modems und seriellen Terminals. Wenn mein Terminal und mein Modem offline gehen, verarbeiten Sie dies im Hintergrund, damit die Arbeit erledigt ist, wenn ich das nächste Mal online gehe.
Fiasco Labs

Antworten:

19

Aus der Bash-Manpage :

Wenn ein Befehl vom Steueroperator & beendet wird, führt die Shell den Befehl im Hintergrund in einer Subshell aus. Die Shell wartet nicht auf den Abschluss des Befehls und der Rückgabestatus ist 0.

Also ja, es ist eine Shell-Sache und kann mit jedem Befehl verwendet werden. Es gibt Ihnen im Wesentlichen sofort die Kontrolle zurück und ermöglicht, dass der Befehl im Hintergrund ausgeführt wird. Dies wird fast immer verwendet, nohupda Sie die Shell normalerweise nach dem Starten des Befehls beenden möchten.

mgorven
quelle
4
Ich habe gesehen, dass Sie in letzter Zeit eine Reihe guter Antworten gepostet haben, und mein Gehirn übersetzt Ihren Benutzernamen immer in McGuyver. Ich bin mir nicht sicher, warum ich das sagen muss.
MDMarra
1
@ MDMarra Ich nehme das als Kompliment ;-)
mgorven
1
@ MDMarra Zumindest denkst du nicht: "McGruber"
Ward - Reinstate Monica
7

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

Die Verwendung von nohup + kaufmännisches Und (&) bewirkt dasselbe, außer dass am Ende der Sitzung das übergeordnete Element des untergeordneten Prozesses in "1" geändert wird. Dies ist der "init" -Prozess, wodurch verhindert wird, dass das untergeordnete Element getötet wird.

Michel
quelle
3

Ja, es ist eine Shell-Sache - es führt den Befehl im Hintergrund aus, sodass Sie nicht warten müssen, bis der aktuelle Befehl zurückgegeben wird, bevor Sie weitere Befehle ausgeben.

rauben
quelle