Como posso configurar uma combinação de teclas para enviar uma SIGKILL
para o trabalho em primeiro plano atual? Eu já sei que Ctrl+ Cé SIGINT
e Ctrl+ \é SIGQUIT
. Eu gostaria de uma opção mais severa.
Existe algo seriamente desaconselhável sobre isso?
keyboard-shortcuts
shell
zsh
drewrobb
fonte
fonte
zsh
, e o fato de a pergunta falar sobre combinações de teclas. Esta é uma pergunta sobre a configuraçãozsh
do editor de linha, não sobre a configuração do terminal.Respostas:
Inacessível ou não, é realmente impossível:
As combinações de teclas Control + [?] São realmente tratadas pelo driver tty e não pelo shell, porque enquanto houver um processo em execução em primeiro plano, a entrada e a saída do seu terminal serão encaminhadas diretamente para o processo. O shell nunca seria capaz de agir (ou até mesmo ver) suas teclas pressionadas.
Você pode obter uma lista das combinações de teclas Ctrl + [?] Atribuídas no momento
stty -a
; no entanto, apenasintr
(SIGINT, geralmente vinculado a Ctrl + C)quit
(SIGQUIT, geralmente vinculado a Ctrl + \) esusp
(SIGSUSP, geralmente vinculado a Ctrl + Z) correspondem aos sinais unix reais. (kill,
por exemplo, não envia SIGKILL, mas exclui a entrada atual.)Infelizmente, não há como enviar um dos dois sinais que não podem ser desativados por um processo (SIGKILL e SIGSTOP); portanto, se todos os três sinais mencionados não tiverem efeito, você precisará usar outra maneira ( por exemplo, outro shell) para matar o processo em primeiro plano.
(Na verdade, além de capturar todos os três sinais, o processo em primeiro plano pode até desativar as combinações especiais de teclas em primeiro lugar, definindo o tty no modo "bruto". O SSH faz isso, por exemplo - é assim que pode retransmitir um Ctrl + C pressionado localmente no host remoto.)
fonte
Sim, há algo desaconselhável. Você está saltando diretamente do
SIGINT
aoSIGKILL
sinal. Sugiro, como as outras pessoas , olhando para o envio daSIGHUP
ouSIGTERM
sinais antes de empregar a opção nuclear. Depois, é desaconselhável ter isso como uma ligação de chave, o que obviamente significa que ele só funcionará quando o ZLE estiver ativo e o shell solicitar interativamente a entrada, e não quando os comandos estiverem em execução. (Para isso, você iria precisar configurar o terminal, não o shell, e necessidade de ter uma disciplina linha terminal que implementa o envioSIGTERM
como uma extensão do POSIX especificado comportamento.)Nessa nota, ninguém mais parece ter notado ainda que você está perguntando sobre as combinações de teclas do editor de linha de shell, e não o terminal. Para responder à primeira parte da sua pergunta, então:
Você configura uma função shell para enviar o sinal para o trabalho "atual".
Então você constrói um widget definido pelo usuário do ZLE que chama essa função de shell.
Finalmente, você vincula esse widget a uma chave de sua escolha.
fonte