Es gibt viele Fälle, in denen kleine Unterschiede zwischen Umgebungen Sie beißen können. Dies ist eine, auf die ich kürzlich gestoßen bin. Was ist der Unterschied zwischen diesen beiden Befehlen?
1 ~ $ nohup myprocess.out &
2 ~ $ myprocess.out &
Die Antwort ist die gleiche wie gewöhnlich - es kommt darauf an.
nohup fängt das Auflegesignal ab, das kaufmännische Und nicht.
Was ist das Auflegesignal?
SIGHUP - Auflegen am aufsteigenden Terminal oder Tod des Steuerprozesses (Wert: 1).
Wenn Sie einen Befehl mit & ausführen und anschließend die Shell beenden, beendet die Shell normalerweise den Unterbefehl mit dem Hangup-Signal (wie kill -SIGHUP $ PID). Dies kann mit nohup verhindert werden, da das Signal abgefangen und ignoriert wird, sodass es nie die eigentliche Anwendung erreicht.
Gut, aber wie in diesem Fall gibt es immer "Aber". Es gibt keinen Unterschied zwischen diesen Startmethoden, wenn die Shell so konfiguriert ist, dass sie überhaupt kein SIGHUP sendet.
Wenn Sie bash verwenden, können Sie mit dem unten angegebenen Befehl herausfinden, ob Ihre Shell SIGHUP an ihre untergeordneten Prozesse sendet oder nicht:
~ $ shopt | grep hupon
Und außerdem gibt es Fälle, in denen nohup nicht funktioniert. Wenn der von Ihnen gestartete Prozess beispielsweise das NOHUP-Signal erneut verbindet (dies erfolgt im Inneren auf der Ebene des Anwendungscodes).
In dem beschriebenen Fall hat mich das Fehlen von Unterschieden gebissen, als in einem Skript zum Starten eines benutzerdefinierten Dienstes ein zweites Skript aufgerufen wurde, das die richtige Anwendung ohne den Befehl nohup einrichtet und startet.
In einer Linux-Umgebung funktionierte alles reibungslos, in einer zweiten wurde die Anwendung beendet, sobald das zweite Skript beendet wurde (das Erkennen dieses Falls hat natürlich viel mehr Zeit in Anspruch genommen, als Sie vielleicht denken: stecken_out_tongue :).
Nach dem Hinzufügen von nohup als Startmethode zum zweiten Skript wird die Anwendung auch dann ausgeführt, wenn die Skripte beendet werden und dieses Verhalten in beiden Umgebungen konsistent wird.