Quando você fecha um terminal, o terminal envia um sinal SIGHUP para o shell; o shell, por sua vez, envia um sinal SIGHUP para todos os seus grupos de processos filhos, que incluem grupos de processos em segundo plano;
Como cada processo único reagirá ao sinal depende inteiramente do processo: se o processo não definiu um manipulador para o sinal e disse ao kernel (através de algum syscall como signal()
ou sigaction()
) que deseja lidar com ele, o kernel executa o manipulador padrão do sinal, que no caso de um sinal SIGHUP consiste em finalizar o processo.
No entanto, quando você executa um comando com sudo
, o UID do sudo
processo e seu processo filho é definido como 0
(raiz); em geral, a menos que o UID do processo que está enviando o sinal seja 0
(raiz) ou igual ao processo de destino, o kernel descartará o sinal (ou seja: um processo não pode enviar sinais para um processo pertencente a outro usuário, a menos que o processo o envio do sinal pertence à raiz); é por isso que um processo executado pelo usuário, como a instância Bash executada pelo terminal, não pode SIGHUP um sudo
processo e, finalmente, fechar um terminal não afeta o processo iniciado sudo
.