
Почему, когда я делаю 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
, что не является значением по умолчанию.