A principal razão é porque os shells são construídos para capturar o sinal TERM
. Esse comportamento está documentado. Para citar o manual do bash 4.3:
SINAIS
Quando o bash é interativo, na ausência de quaisquer traps, ele ignora o SIGTERM (para que o kill 0 não mate um shell interativo), e SIGINT é capturado e manipulado (para que a espera embutida seja interrompível). Em tudo casos, bash ignora SIGQUIT. Se o controle de trabalho estiver em vigor, o bash ignora o SIGTTIN, o SIGTTOU e o SIGTSTP.
De man kill
:
O sinal padrão para kill é TERM.
Agora, se você tivesse que especificar kill -KILL $$
, o que realmente mataria o seu shell, e uma vez que o shell de controle saísse - isso fecharia o terminal. As opções -9
, -KILL
e -SIGKILL
são todos aliases para o mesmo sinal kill
, e é por isso que qualquer um desses 3 funciona, e é um dos aliases que Siguza apontou nos comentários.
Contrastando com o que M. Becerra disse, isso não tem nada a ver com a própria janela, já que a janela PID é sempre diferente da da shell:
# Shell PID
$ cat /proc/self/status | grep '^Pid:'
Pid: 7058
$ echo $$
14709
# GUI window PID
$ xdotool getactivewindow getwindowpid
2774