Eu tenho duas teclas de atalho para procurar e encerrar interativamente um processo no Linux:
bindsym $mod+k exec --no-startup-id \
"ps axo pid,cmd | sed 1d | dmenu -i -l 20 | awk '{print $1}' | xargs kill"
bindsym $mod+$sh+k exec --no-startup-id \
"ps axo pid,cmd | sed 1d | dmenu -i -l 20 | awk '{print $1}' | xargs -s SIGSEGV kill"
A segunda tecla de atalho é a versão "tentar mais" para alvos que não respondem. Qual é o sinal mais apropriado para usar aqui? Parece um abuso, SIGSEGV
uma vez que não há falha de segmentação subjacente.
sinal (2) diz
Os sinais SIGKILL e SIGSTOP não podem ser capturados ou ignorados
mas, na minha experiência, é muito comum que um processo que não responde sobreviva SIGKILL
enquanto morre de vontade de SIGSEGV
.
Qual é a maneira "menos errada" de eliminar impiedosamente um processo?
Para encerrar impiedosamente um processo, envie um SIGKILL (sinal número 9). Este sinal não pode ser ignorado pelo processo. É como desligar a tomada:
A maneira adequada e mais limpa de encerrar um processo é enviar um SIGTERM (sinal número 15). Isso permite que o processo faça algumas tarefas domésticas antes de desligar. No entanto, nem sempre funcionará em processos que não respondem.
O SIGSEGV não se aplica aqui; é o sinal (violação de SEGmentação) que o sistema operacional envia para um processo que cometeu uma falha de segmentação.