Я прочитал ответ от пользователя, который утверждал, что работает
foo 2>&1 >& output.log &
приведет к fooпродолжению работы, даже когда они выходят из системы. По словам этого пользователя, это даже работало через соединения SSH.
Я действительно не верил в это, поскольку у меня сложилось впечатление, что в случае отключения от SSH или завершения TTY оболочка и, следовательно, ее процессы получат SIGHUP, что приведет к их завершению. Это, по моему предположению, было единственной причиной для использования nohupв таких случаях, или tmux, screenи др.
Затем я посмотрел в руководство glibc :
Этот сигнал также используется, чтобы сообщить о завершении процесса управления на терминале заданиям, связанным с этим сеансом; это завершение эффективно отключает все процессы в сеансе от управляющего терминала.
Кажется, это подтверждает мои мысли. Но, глядя дальше, он говорит :
Если процесс является лидером сеанса, у которого есть управляющий терминал, то сигнал SIGHUP отправляется каждому процессу в задании переднего плана, и управляющий терминал отсоединяется от этого сеанса.
Таким образом, это означает, что задания, помещенные в фоновом режиме, не получат SIGHUP?
К моему дальнейшему замешательству, я запустил интерактивный сеанс Zsh, запустил yes >& /dev/null &и набрал exitтекст, когда Zsh предупредил меня о том, что у меня выполняются задания, и после exitповторного набора текста сказал, что он SIGHUPed одно задание. То же самое в Bash оставляет работу запущенной ...
logoutиyesвсе еще работает.