Suponha que eu tenha um aplicativo X, que pega teclado e mouse como seu modo normal de operação (por exemplo, QEMU), mas que, devido a um bug em algum lugar, trava muito (por exemplo, fica preso no modo de suspensão do disco). Normalmente, eu mataria um aplicativo usando kill(1)
um terminal remoto, mas se o aplicativo estiver no modo de suspensão do disco, ele não pode ser realmente morto. Eu poderia matar a conexão deste aplicativo com o servidor X pelo xkill
utilitário, mas desta vez não posso fazer isso porque o mouse está preso, então xkill
não será executado.
Então, como eu libero meu teclado e mouse da garra de um cliente X, se estou disposto a sacrificar esse cliente, mas não consigo matá-lo pelos meios do sistema operacional?
Embora o modo de uso mais conhecido
xkill
seja "click to kill", existe uma opção-id
, que pode ser fornecida com o Window Id do cliente que você deseja desconectar do servidor X. Então, se você puder acessar sua sessão X a partir de um terminal/VT remoto, poderá usarxprop
ou algum outro meio para obter o Id e passá-lo paraxkill
.Suponha que a janela ativa atual pertença ao cliente X que pegou as teclas&mouse. Então, o seguinte irá matar a conexão deste cliente com o servidor X e, assim, liberar o teclado e o mouse da garra:
Isso realmente funcionou para mim quando tentei me livrar da garra do QEMU quando o QEMU estava preso no modo de suspensão do disco.
Você pode tentar o truque SysRq+ padrão Rque deve liberar o teclado do servidor X, ou a combinação Ctrl+ Alt+ 1-6que altera o console atual, talvez permitindo que você execute um terminal e mate o programa defeituoso.
kill -9
muitas vezes funciona quando a planíciekill
não.