Diferença entre fechar o terminal usando o botão de fechamento e Ctrl-D

8

Quando estou iniciando um processo em segundo plano e fecho o terminal usando o botão de fechamento da janela, o processo em segundo plano é interrompido. No entanto, se eu fechar o terminal usando Ctrl + D , o processo em segundo plano continua em execução:

sam@Sam-Pc:~$ yes > /dev/null &
[1] 10219
// I then close the terminal a reopen a new one
sam@Sam-Pc:~$ ps aux | grep yes 
sam      10295  0.0  0.0  15948  2152 pts/8    S+   00:54   0:00 grep --color=auto yes

E agora usando Ctrl + D para fechar o terminal:

sam@Sam-Pc:~$ yes > /dev/null &
[1] 10299
sam@Sam-Pc:~$Ctrl-D
// I then reopen a new terminal
sam@Sam-Pc:~$ ps aux | grep yes 
sam      10219 99.4  0.0  11404   812 ?        R    00:52   2:01 yes
sam      10295  0.0  0.0  15948  2152 pts/8    S+   00:54   0:00 grep --color=auto yes

Alguém poderia explicar esse comportamento?

Obrigado!

    
por Sam Bruns 05.09.2015 / 23:59

1 resposta

11

Se você fechar a janela usando o botão de fechamento, então um SIGHUP será enviado para os processos em segundo plano pelo shell, que também recebe SIGHUP quando o terminal for fechado. A resposta normal dos processos seria sair, portanto os trabalhos em segundo plano serão fechados.

Por outro lado, se você pressionar Cntl + D , nenhum sinal será enviado. Um EOF (Fim do Arquivo) é indicado no STDIN e no shell (e terminal) fecha. EOF basicamente significa que chegamos ao fim do STDIN, não há mais nada a ser inserido. Como o EOF não ativa nenhuma resposta relacionada a trabalhos em segundo plano, eles continuarão em andamento.

    
por 06.09.2015 / 00:19