huponexit für Nicht-Login-Shells

huponexit für Nicht-Login-Shells

Dies ist eine Fortsetzung zuBekommen Hintergrundprozesse beim Abmelden ein SIGHUP?.

Es scheint, dass das huponexitnur 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 HUPan die Bash, von der aus die Prozesse gestartet wurden, funktioniert wie erwartet, huponexittut 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 $$' EXITfunktioniert 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.

verwandte Informationen