¿Cómo forzo a matar a Emacs?

7

A menudo me encuentro con una configuración de emacs incompleta o inválida, que rompe el comportamiento normal de kill-emacstal manera que se detiene en un error.

En este caso, me gustaría matar a la fuerza emacs, sin recurrir a buscar el PID y emitir un killdesde el shell. ¿Puedo hacer esto en Emacs Lisp puro?

PythonNut
fuente
No estoy seguro de seguirlo. Si kill-emacsno funciona, otros enfoques de elisp también pueden verse afectados, ya que probablemente terminen llamando de kill-emacsuna manera u otra. ¿Qué error obtienes? Puede ser más fácil corregir el error.
Tyler
Quiero decir, podría crear una función que llame kill -9al pid de Emacs actual, por ejemplo. Tendrías que estar muy desordenado para romper eso.
PythonNut
55
Usted puede tratar de ajuste kill-emacs-hooka nilantes de llamar kill-emacs. También puede obtener el uso de pid de Emacs emacs-pidy hacer que se suicide llamando call-processal " kill -9".
Constantine
1
si no quieres cazar el PID, aún así, hay pkill & pgrep: \
Nsukami _
1
Sin relación, pero es posible que desee evitar ejecutar múltiples sesiones de emacs
Sean Allred

Respuestas:

12

Usted puede tratar de ajuste kill-emacs-hooka nilantes de llamar a kill-emacs:

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

Alternativamente, puede obtener el PID de Emacs emacs-pidy hacerlo suicidarse llamando call-processal " 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))))
Constantina
fuente
3
No es una crítica de la respuesta, solo información adicional: tenga en cuenta que el uso de la señal nueve ( -9in kill -9) dejará huérfanos a cualquier proceso que haya generado emacs, tal como sucedería si emacs fuera un simple script de shell ...
Sean Allred
Aunque TERM a menudo no puede matar emacs en un estado roto. Entonces puede ser lo único.
PythonNut
1

A veces, termino con varios procesos de emacs inalcanzables por ahí. Mi emacsclient normalmente inicia automáticamente un emacs y llama: server-startsupongo que hay algún error en mi configuración en algún lugar que hace que esto suceda más de una vez.

Yo mato el emacsen extra con killall emacsuna concha. Hasta ahora, -9no ha sido necesario. (Funciona cuando solo hay un emacs ejecutándose, ¡y no tengo que buscar un pid!)

daveloyall
fuente
A veces, cuando emacs se cuelga por completo, -9se necesita a. Por supuesto, esto significa que emacs no podrá suicidarse, pero lo agrego por si acaso.
PythonNut
Esto fue lo único que funcionó para mí después de ein:jupyter-notebookprevenir todos los demás métodos. Supongo que estaba colgando en alguna parte, pero ya había terminado todos los procesos de Python y había eliminado todos los buffers.
n1k31t4