Por que alguns programas executados no Terminal usando '&' fecham quando o Terminal e outros não?

27

Eu estava pensando, por exemplo, quando eu inicio o qtox com:

qtox &

E, em seguida, feche o Terminal, qtox fecha com ele. No entanto, ao executar etherape usando:

sudo etherape &

Fechamento O terminal não fecha ou causa qualquer problema ao Etherape. E entre diferentes aplicações, há comportamentos diferentes, alguns próximos quando o Terminal funciona, outros não, por quê? Por que alguns fecham quando outros não? Estou executando o Ubuntu GNOME 15.10 com o GNOME 3.18.

    
por Great Uncle Bulgaria 30.11.2015 / 17:20

1 resposta

36

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 grupos de processos filhos, que incluem grupos de processos em segundo plano;

Como cada processo irá reagir ao sinal é inteiramente para o processo: se o processo não definiu um manipulador para o sinal e dizer ao kernel (via alguns syscall como signal() ou sigaction() ) que deseja manipulá-lo, o kernel executa o manipulador padrão para o sinal, que no caso de um sinal SIGHUP consiste em terminar o processo.

No entanto, quando você executa um comando com sudo , o UID do processo sudo e seu processo filho são definidos como 0 (root); em geral, a menos que o UID do processo que envia o sinal seja 0 (root) ou o mesmo que o processo de destino, o kernel descarta o sinal (isto é: um processo não pode enviar sinais para um processo de outro usuário, a menos que o processo que envia o sinal seja de propriedade de root); é por isso que um processo executado pelo usuário, como a instância Bash executada pelo terminal, não pode processar SIGHUP a sudo e, em última análise, fechar um terminal não afeta um processo iniciado com sudo .

    
por kos 30.11.2015 / 17:46