
Это продолжениеПолучают ли фоновые процессы сигнал SIGHUP при выходе из системы?.
Кажется, это huponexit
работает только для оболочек входа. Как мне добиться такого поведения для оболочек без входа, например, тех, которые запускаются в моем окне терминала?
Отправка HUP
в bash, откуда были запущены процессы, работает как и ожидалось, но huponexit
не работает.
решение1
Вы можете объявить свой собственный код, который будет запущен при выходе из оболочки.
trap 'kill -HUP $(jobs -lp) 2>/dev/null || true' EXIT
(Мое более раннее предложение trap 'kill -HUP $$' EXIT
не работает в bash 4.2, поскольку, если я правильно понимаю исходный код, bash пропускает часть своей обычной очистки, включая повторную отправку HUP, когда он уже обрабатывает условие выхода.)
решение2
trap 'kill -HUP -$$' exit
Кажется, я не могу добавить комментарий выше. Префикс с отрицательным знаком для обозначения группы процессов. Я думаю, это зависнетвседочерние процессы, порожденные оболочкой, включают внуков, правнуков и т. д.