В которых случаях РАЗВЕ SIGHUP не отправляется в задание, когда Вы выходите из системы?

exec может использоваться для перенаправления stdout текущего сценария в другой файл.

[ -e "$1" ] && exec > $1
command_with_output
10
28.07.2013, 23:16
1 ответ

Bash, кажется, отправляет SIGHUP только если это сам получило a SIGHUP, который, например, происходит, когда виртуальный терминал закрывается или когда соединение SSH прервано. Из документации:

Оболочка выходит по умолчанию по получении SIGHUP. Перед выходом интерактивная оболочка снова посылает SIGHUP всем заданиям, работая или остановилась. Остановленные задания отправляются SIGCONT, чтобы гарантировать, чтобы они получили SIGHUP. Чтобы препятствовать тому, чтобы оболочка отправила сигнал SIGHUP в конкретное задание, это должно быть удалено из таблицы заданий с отрицанием встроенного (см. Управление заданиями Builtins), или отмеченный для не получения использования SIGHUP отрицают-h.

Таким образом, если Вы вводите exit или нажмите Ctrl+D, которым останется весь фоновый процесс, так как это не отправляет зависать сигнал в Bash.

Можно вынудить Bash предупредить Вас о том, что там все еще выполняют фоновые процессы с

shopt -s checkjobs

Существует опция отправить SIGHUP на выходе, если Вы находитесь в интерактивной оболочке (см. здесь). Но это не работает над моей машиной с Bash 4.2.25. Возможно, это работает на Вас

shopt -s huponexit
17
27.01.2020, 20:01

Теги

Похожие вопросы