
Warum, wenn ich command & exit
im 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 exit
Befehl 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) vimiv
erhalten , wenn es einSIGHUP
VordergrundJob, 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 SIGHUP
und 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 anderenexit
Befehl,vimiv
wird geschlossen
Das ist vielleicht eine Besonderheit dieses vimiv &
Programms – wenn ich xclock &
und dann exit
in einer separaten Zeile in einem Terminal eingebe, xclock
wird es nicht beendet. Es wird jedoch beendet, wenn ich das Terminal über die X
Schaltfläche schließe, weil in diesem Fall bash
ein Signal empfangen SIGHUP
und erneut an gesendet wird xclock
.
[1] Bash kann SIGHUP
beim normalen Beenden auch ein senden, aber nur mit shopt -s huponexit
, was nicht die Standardeinstellung ist.