Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Emacs, internal process killing, any command?

How to kill an internal process in Emacs? For example I run M-x shell.

I can check running processes with M-x list-processes but how can I kill a process from this list?

like image 872
Linkas Avatar asked May 16 '12 21:05

Linkas


1 Answers

There is no default key binding for this; however see pjammer's answer -- list-processes+ includes (among other things) a kill binding on C-k -- and also Joao Tavora's answer -- which provides just a kill binding (for the same key).

event_jr points out in the comments that you can use M-: (kill-process) RET to kill the current buffer's process.

More generally: You can use M-: (kill-process PROCESS) RET, where PROCESS "may be a process, a buffer, or the name of a process or buffer", with those names being as they appear in the output of list-processes. Process names take precedence over buffer names, should you happen to have a conflict; so it's probably best to be in the habit of supplying the process name.

Alternatively, Emacs 23+ has a general system process manager (M-x proced) which is more akin to running top, and which does have a default binding for sending (arbitrary) signals (k). Of course it may be far less obvious in that listing which process you're interested in.


Edit: Better late than never :) The following enables M-x kill-process RET to be used (tested in 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))) 
like image 86
phils Avatar answered Oct 08 '22 19:10

phils