Como forço a matar o Emacs?

7

Costumo me deparar com uma configuração incompleta ou inválida do emacs, que interrompe o comportamento normal de kill-emacstal forma que para com um erro.

Nesse caso, eu gostaria de matar o emacs com força, sem recorrer à busca do PID e à emissão de um a killpartir do shell. Posso fazer isso no Emacs Lisp puro?

PythonNut
fonte
Não tenho certeza se sigo. Se kill-emacsnão funcionar, outras abordagens do elisp também podem ser prejudicadas, pois provavelmente acabam chamando de kill-emacsum jeito ou de outro. Que erro você recebe? Pode ser mais fácil corrigir o erro.
Tyler
Quero dizer, você pode criar uma função que chama kill -9o pid atual do Emacs, por exemplo. Você teria que estar muito confuso para quebrar isso.
PythonNut
5
Você pode tentar a definição kill-emacs-hookpara nilantes de chamar kill-emacs. Você também pode obter o pid do Emacs emacs-pide fazê-lo cometer suicídio ligando call-processcom " kill -9".
Constantine
11
se você não quiser caçar o PID, ainda assim, há pkill & pgrep: \
Nsukami _
11
Independente, mas você pode evitar a execução de várias sessões do emacs #
Sean Allred

Respostas:

12

Você pode tentar a definição kill-emacs-hookpara nilantes de chamar kill-emacs:

(defun really-kill-emacs ()
  "Like `kill-emacs', but ignores `kill-emacs-hook'."
  (interactive)
  (let (kill-emacs-hook)
    (kill-emacs)))

Como alternativa, você pode obter o PID do Emacs emacs-pide fazê-lo cometer suicídio ligando call-processcom " kill -9":

(defun brutally-kill-emacs ()
  "Use `call-process' to send ourselves a KILL signal."
  (interactive)
  (call-process "kill" nil nil nil "-9" (number-to-string (emacs-pid))))
Constantine
fonte
3
Não é uma crítica da resposta, apenas informações adicionais: observe que o uso do sinal nove ( -9in kill -9) tornará órfão todos os processos que o emacs gerou, assim como aconteceria se o emacs fosse um simples shell script.
Sean Allred
Embora o TERM muitas vezes não consiga matar o emacs em um estado quebrado. Portanto, pode ser a única coisa.
PythonNut
1

Às vezes, acabo com vários processos inacessíveis do emacs. Meu emacsclient normalmente inicia automaticamente um emacs e chama server-start- Acho que há algum bug na minha configuração em algum lugar que resulta em isso acontecer mais de uma vez.

Eu mato o emacsen extra com killall emacsuma concha. Até agora, -9não foi necessário. (Funciona quando há apenas um emacs em execução também, e eu não preciso caçar pid!)

daveloyall
fonte
Às vezes, quando o emacs trava completamente, -9é necessário um. Claro, isso significa que o emacs não será capaz de cometer suicídio, mas estou adicionando apenas por precaução.
PythonNut
Essa foi a única coisa que funcionou para mim depois de ein:jupyter-notebookimpedir os outros métodos. Eu acho que estava pendurado em algum lugar, mas eu já havia encerrado todos os processos Python e matado todos os buffers.
N1k31t4 7/11