exec
может использоваться для перенаправления stdout текущего сценария в другой файл.
[ -e "$1" ] && exec > $1
command_with_output
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
SIGHUP
отправляется, иначе, с чистым выходом, задания продолжают работать? Это объясняет, что я видел. – slhck 02.08.2013, 17:54huponexit
"только в действительности для интерактивного – npostavs 08.11.2015, 18:30