Li uma resposta de um usuário que alegou que a execução
foo 2>&1 >& output.log &
resultaria em foo
continuar executando mesmo quando eles se desconectarem. De acordo com esse usuário, isso até funcionou em conexões SSH.
Eu realmente não acreditava nisso, pois estava com a impressão de que, no caso de desconectar do SSH ou encerrar o TTY, o shell e, portanto, seus processos receberiam um SIGHUP, fazendo com que eles terminassem. Este, sob minha suposição, foi o único motivo para o uso nohup
em tais casos, ou tmux
, screen
et al.
Então eu olhei no manual da glibc :
Esse sinal também é usado para relatar a finalização do processo de controle em um terminal para trabalhos associados a essa sessão; essa rescisão efetivamente desconecta todos os processos da sessão do terminal de controle.
Isso parece confirmar meus pensamentos. Mas olhando mais longe, diz :
Se o processo é um líder de sessão que possui um terminal de controle, um sinal SIGHUP é enviado para cada processo no trabalho em primeiro plano, e o terminal de controle é desassociado dessa sessão.
Então, isso significa que os trabalhos colocados em segundo plano não receberão SIGHUP?
Para minha maior confusão, executei uma sessão interativa do Zsh, executei yes >& /dev/null &
e digitei exit
quando o Zsh me avisou que eu estava executando trabalhos e, depois de digitar exit
pela segunda vez, me disse que havia SIGHUPed um trabalho. Fazer exatamente o mesmo no Bash deixa o trabalho em execução ...
logout
eyes
ainda estou em execução.