¿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?


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))))

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!)


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.