Emacs, proceso interno de matanza, ¿alguna orden?
process-management (4)
¿Cómo matar un proceso interno en Emacs? Por ejemplo corro Mx shell
.
Puedo verificar los procesos en ejecución con los procesos de Mx list-processes
pero ¿cómo puedo eliminar un proceso de esta lista?
Este hilo es antiguo pero aquí hay un truco muy rápido que funciona perfectamente para mí.
(define-key process-menu-mode-map (kbd "C-k") ''joaot/delete-process-at-point)
(defun joaot/delete-process-at-point ()
(interactive)
(let ((process (get-text-property (point) ''tabulated-list-id)))
(cond ((and process
(processp process))
(delete-process process)
(revert-buffer))
(t
(error "no process at point!")))))
No hay un enlace de clave predeterminado para esto; sin embargo, vea la respuesta de pjammer - list-processes+
incluye (entre otras cosas) un enlace de muerte en Ck - y también la respuesta de Joao Tavora - que proporciona solo un enlace de muerte (para la misma clave).
event_jr señala en los comentarios que puedes usar M-: (kill-process)
RET para finalizar el proceso del búfer actual .
De manera más general: puede usar M-: (kill-process PROCESS)
RET , donde PROCESS
"puede ser un proceso, un búfer o el nombre de un proceso o búfer", con esos nombres como aparecen en la salida de la list-processes
. Los nombres de proceso tienen prioridad sobre los nombres de búfer, en caso de que tenga un conflicto; así que probablemente sea mejor tener el hábito de proporcionar el nombre del proceso.
Alternativamente, Emacs 23+ tiene un administrador de procesos del sistema general ( Mx proced
) que es más parecido a la ejecución de top
, y que tiene un enlace predeterminado para el envío de señales (arbitrarias) ( k ). Por supuesto, puede ser mucho menos obvio en el listado en el que está interesado el proceso.
Edición: mejor tarde que nunca :) Lo siguiente permite el uso del Mx kill-process
RET (probado en Emacs 26.1):
;; Enable M-x kill-process (to kill the current buffer''s process).
(put ''kill-process ''interactive-form
''(interactive
(let ((proc (get-buffer-process (current-buffer))))
(if (process-live-p proc)
(unless (yes-or-no-p (format "Kill %S? " proc))
(error "Process not killed"))
(error (format "Buffer %s has no process" (buffer-name))))
nil)))
Parece que hay un nuevo modo o complemento que puede usar en su lugar llamado proceso de lista +
Una forma alternativa:
Puedes usar Mx eval-expression
RET
Luego escriba: (delete-process "<name-of-the-process>")
RET
(donde el "name-of-the-process"
se obtuvo previamente de Mx list-processes
Process RET ).
Confirme que el proceso se eliminó repitiendo Mx list-processes
RET ).
Y eso es.