Gibt es ein definiertes Verhalten des aktuellen Programms, das ausgeführt wird, wenn unser SSH beendet wird?

Gibt es ein definiertes Verhalten des aktuellen Programms, das ausgeführt wird, wenn unser SSH beendet wird?

Ich denke, in der Vergangenheit, sagen wir, wenn ich einen Ruby on Rails-Server (mithilfe von rails s) auf einer Bash laufen ließ, zu der ich per SSH verbunden war, und die Internetverbindung unterbrochen wurde, dann

  1. Der Ruby on Rails-Server würde anhalten
  2. Der Ruby on Rails-Server lief tatsächlich weiter (ich glaube, das lag an der unterbrochenen VPN-Verbindung) und ich musste ps uxalle damit verbundenen Prozesse einzeln beenden ... das war ein wenig chaotisch.

Könnte entweder (1) oder (2) passieren? Gibt es ein klar definiertes Verhalten? Wenn es beispielsweise kein VPN ist, aber die SSH-Verbindung getrennt wurde, dann (1), aber wenn es VPN ist, dann entweder (1) oder (2)?

PS: Ich bin auf die Verwendung umgestiegen, tmuxwenn ich einen Rails-Server darauf ausführen muss, sodass ich einfach zurückkommen und mich tmux a -t foowieder damit verbinden und bei Bedarf STRG-C drücken kann.

Antwort1

Ja, die mit der Shell verbundenen Prozesse empfangen das Signal hup. Sie können es ignorieren, wenn sie entsprechend programmiert sind. Siehe man für nohup.

zB nohup commandum einen Befehl auszuführen, damit es nicht zu einem Problem kommt. Aber auch stdin, stdout, stderr werden umgeleitet.

Siehe auch disownund&

vollständig abschaltennohup > /dev/null command & disown

verwandte Informationen