Почему команда продолжает выполняться после закрытия терминала через команду exit?

Почему команда продолжает выполняться после закрытия терминала через команду exit?

Почему, когда я делаю command & exitв терминале (например vimiv & exit)вимивпродолжает работать, когда терминал закрыт? Я ожидалвимивзапустить как фоновое задание в текущем терминале, а затем получитьвздохкогда терминал закрыт и также выходит. Например, если я выполню, vimiv &а затем другую exitкоманду,вимивзакроется

решение1

Я ожидал, что vimiv запустится как фоновое задание в текущем терминале, а затем получит сигнал sigup при закрытии терминала и также завершит работу.

Нет, это не то, что происходит. vimivполучит SIGHUPсигнал (от ядра) только если это былпередний планработа, или если это былаостановилсяфоновая работа. Но это ни то, ни другое: это работающая фоновая работа.

Или если bash (bash в частности, а не любая оболочка вообще) сама получила сигнал SIGHUPи переслала его всем своим неотчуждаемым заданиям. Но в вашем примере оболочка завершается нормально через exit, а не потому, что она получила сигнал от SIGHUP[1].

Например, если я выполню, vimiv &а затем другую exitкоманду, vimivзакроется

Это может быть что-то особенное в этой vimiv &программе — если я ввожу xclock &и затем exitна отдельной строке в терминале, xclockне завершится. Однако она завершится, если я закрою терминал с помощью Xкнопки, потому что в этом случае bashполучит SIGHUPсигнал и перешлет его в xclock.

[1] bash также может отправить a SIGHUPпри обычном выходе, но только с shopt -s huponexit, что не является значением по умолчанию.

Связанный контент