Я прочитал ответ от пользователя, который утверждал, что работает
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
все еще работает.