Warum wird der Befehl weiterhin ausgeführt, nachdem das Terminal über „Exit“ geschlossen wurde?

Warum wird der Befehl weiterhin ausgeführt, nachdem das Terminal über „Exit“ geschlossen wurde?

Warum, wenn ich command & exitim Terminal mache (wie vimiv & exit)Abonnierenläuft weiter, wenn das Terminal geschlossen ist? Ich habe erwartetAbonnierenals Hintergrundjob im aktuellen Terminal zu starten und dann eineseufzendwenn das Terminal geschlossen und beendet wird. Wenn ich beispielsweise „execute“ vimiv &gefolgt von einem anderen exitBefehl ausführe,Abonnierenwird schließen

Antwort1

Ich habe erwartet, dass vimiv als Hintergrundjob im aktuellen Terminal gestartet wird und dann ein Sighup erhält, wenn das Terminal geschlossen und auch beendet wird.

Nein, das passiert nicht. Ich würde nur dann ein Signal (vom Kernel) vimiverhalten , wenn es einSIGHUPVordergrundJob, oder wenn es eingestopptHintergrundjob. Aber es ist weder das eine noch das andere: Es ist ein laufender Hintergrundjob.

Oder wenn bash (bash im Besonderen, nicht irgendeine Shell im Allgemeinen) selbst ein Signal empfangen SIGHUPund es an alle ihre nicht abgelehnten Jobs weitergesendet hat. Aber in Ihrem Beispiel wird die Shell normal über beendet exit, nicht weil es durch [1] signalisiert wurde SIGHUP.

Wenn ich beispielsweise ausführe, vimiv &gefolgt von einem anderen exitBefehl, vimivwird geschlossen

Das ist vielleicht eine Besonderheit dieses vimiv &Programms – wenn ich xclock &und dann exitin einer separaten Zeile in einem Terminal eingebe, xclockwird es nicht beendet. Es wird jedoch beendet, wenn ich das Terminal über die XSchaltfläche schließe, weil in diesem Fall bashein Signal empfangen SIGHUPund erneut an gesendet wird xclock.

[1] Bash kann SIGHUPbeim normalen Beenden auch ein senden, aber nur mit shopt -s huponexit, was nicht die Standardeinstellung ist.

verwandte Informationen