Primeiro, isso não é específico para o bash. ATT ksh, dash e zsh se comportam da mesma maneira: eles ignoram SIGTERM e SIGQUIT durante a edição da linha de comando; quanto ao mksh, ele também não sai, mas os trata como SIGINT.
Tanto o manual do ksh quanto o manual do bash justificam ignorar o SIGTERM nestes termos:
para que kill 0não mate um shell interativo
kill 0mata todos os processos no grupo de processos em que o shell está¹. Em poucas palavras, o grupo de processos consiste em todos os processos em execução em primeiro plano em um terminal ou em todos os processos em segundo plano ou trabalho suspenso.
Mais precisamente, é isso o que acontece nas conchas modernas com controle de trabalho . Nessas conchas, kill 0não seria útil, pois o shell estaria em um grupo de processos próprio. Os shells mais antigos (ou shells modernos depois set +m) não criaram grupos de processos para comandos em segundo plano. Portanto, você pode usar o comando kill 0para eliminar todos os comandos em segundo plano sem desconectar-se kill 0.
No entanto, existem outras situações semelhantes nas quais tornar a concha imune é útil. Considere o caso em que você possui processos que monopolizam um terminal e deseja matá-los sem sair do sistema. Muitos sistemas possuem uma ferramenta como a pkillqual permite matar os processos em execução em um terminal. Você pode executar pkill -t $TTYou pkill -QUIT -t $TTYeliminar todos os processos em execução no terminal atual, exceto o shell que ignora o sinal.
Um shell normalmente desaparece quando o usuário o sai (com um comando como exitou logout) ou quando seu terminal sinaliza o final da entrada (o usuário pode causar isso pressionando Ctrl+ D) ou desaparece completamente. Neste último caso, o shell recebe o sinal SIGHUP, e não o ignora.
Para o seu caso de uso de logoff de uma sessão X, kill -15 -1será feito, pois mata o emulador de terminal que faz com que o shell receba o SIGHUP. De fato, é suficiente matar o servidor X, mas isso exige encontrar seu ID do processo. Se você deseja que o mesmo comando funcione em uma sessão de texto, você pode usá-lo kill -15 -1; exit. É um comando muito perigoso de ter ao seu alcance de qualquer maneira.
Seem Isso não parece ser mencionado nos manuais do shell como regra; é um recurso da chamada do sistema subjacente. É mencionado explicitamente na especificação POSIX .
² Atualmente, para fazer isso, execute jobs -la exibição de uma lista de tarefas com o ID do grupo de processos e depois kill -123 -456 …mate os grupos de processos.
/bin/killou o shell embutido? Neste último caso, estou supondo que o shell não se mate com seu próprio componente.