
Dies ist eine Fortsetzung zuBekommen Hintergrundprozesse beim Abmelden ein SIGHUP?.
Es scheint, dass das huponexit
nur für Login-Shells funktioniert. Wie erreiche ich dieses Verhalten für Nicht-Login-Shells, z. B. die, die in meinem Terminalfenster gestartet werden?
Das Senden HUP
an die Bash, von der aus die Prozesse gestartet wurden, funktioniert wie erwartet, huponexit
tut es aber nicht.
Antwort1
Sie können Ihren eigenen Code deklarieren, der ausgeführt werden soll, wenn die Shell beendet wird.
trap 'kill -HUP $(jobs -lp) 2>/dev/null || true' EXIT
(Mein früherer Vorschlag trap 'kill -HUP $$' EXIT
funktioniert ab Bash 4.2 nicht mehr, da Bash, wenn ich die Quelle richtig verstehe, einen Teil seiner normalen Bereinigung, einschließlich des erneuten Sendens von HUP, überspringt, wenn bereits eine Beendigungsbedingung verarbeitet wird.)
Antwort2
trap 'kill -HUP -$$' exit
Ich kann oben anscheinend keinen Kommentar hinzufügen. Stellen Sie ein negatives Vorzeichen voran, um eine Prozessgruppe zu kennzeichnen. Ich glaube, das wird sich aufhängenalleZu den von der Shell erzeugten untergeordneten Prozessen zählen Enkel, Urenkel usw.