The main reason is because shells are built to trap the
TERM signal. This behavior is documented. To quote bash 4.3 manual:
When bash is interactive, in the absence of any traps, it ignores SIGTERM (so that kill 0 does not kill an
interactive shell), and SIGINT is caught and handled (so that the wait builtin is interruptible). In all
cases, bash ignores SIGQUIT. If job control is in effect, bash ignores SIGTTIN, SIGTTOU, and SIGTSTP.
The default signal for kill is TERM.
Now if you were to specify
kill -KILL $$, what would indeed kill your shell, and once the controlling shell exits - that would close the terminal. The options
-SIGKILL are all aliases for the same
kill signal, which is why any of these 3 work, and is one of the aliases that Siguza pointed out in the comments.
Contrasting to what M. Becerra said, this has nothing to do with window itself, as window PID is always different from shell's:
# Shell PID
$ cat /proc/self/status | grep '^Pid:'
$ echo $$
# GUI window PID
$ xdotool getactivewindow getwindowpid