В понедельник утром я вошел в систему ssh
и выполнил следующую команду:
tail -f /var/log/foo/bar.log | grep something_interesting &
В какой-то момент дня я вышел из системы, нажав Ctrl+D.
В пятницу я вошел в тот же ящик и обнаружил, что tail
процессы все еще запущены. Я ожидал, что они завершится, когда я выхожу из системы.
При дальнейшем изучении выяснилось, что эта опция shopt huponexit
установлена off
на этом компьютере, а также на всех других компьютерах с Linux, которые я пробовал, и на одном компьютере с Mac OS X, который я пробовал.
Когда это стало означать по умолчанию off
, а не on
?
решение1
По умолчанию он был отключен, когда был представлен в bash 2.02:
@@ -119,6 +123,10 @@ int interactive = 0;
/* Non-zero means that the shell was started as an interactive shell. */
int interactive_shell = 0;
+/* Non-zero means to send a SIGHUP to all jobs when an interactive login
+ shell exits. */
+int hup_on_exit = 0;
+
http://git.savannah.gnu.org/cgit/bash.git/commit/shell.c?id=cce855bc5b117cb7ae70064131120687bc69fac0