33

如何杀死 Emacs 中的内部进程?例如我运行M-x shell.

我可以检查正在运行的进程,M-x list-processes但是如何从这个列表中杀死一个进程?

4

5 回答 5

27

没有默认的键绑定;但是,请参阅 pjammer 的答案——list-processes+包括(除其他外)一个 kill 绑定C-k——以及 Joao Tavora 的答案——它仅提供一个 kill 绑定(对于相同的键)。

event_jr 在注释中指出您可以用来终止M-: (kill-process) RET当前缓冲区的进程。

更一般地说:您可以使用M-: (kill-process PROCESS) RET, 其中PROCESS“可能是进程、缓冲区或进程或缓冲区的名称”,这些名称与list-processes. 如果您碰巧有冲突,进程名称优先于缓冲区名称;所以最好养成提供进程名称的习惯。

或者,Emacs 23+ 有一个M-x proced更类似于 running 的通用系统进程管理器 () top,并且它确实具有发送(任意)信号的默认绑定 ( k)。当然,在该列表中,您感兴趣的过程可能远不那么明显。


编辑:迟到总比没有好:)M-x kill-process RET可以使用以下内容(在 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)))
于 2012-05-16T23:29:52.183 回答
18

这个线程很古老,但这里有一个非常适合我的快速破解

(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!")))))
于 2013-08-03T14:47:40.850 回答
10

另一种方法:

您可以使用M-x eval-expression RET

然后输入:(delete-process "<name-of-the-process>") RET

"name-of-the-process"以前从哪里获得M-x list-processes RET)。

通过重复 ) 确认该进程已被终止M-x list-processes RET

就是这样。

于 2013-05-13T14:38:07.153 回答
3

看起来有一个新模式或添加你可以使用而不是称为列表进程+

于 2012-05-17T01:26:41.350 回答
0

如果你使用counsel你可以运行M-x counsel-list-processes. 然后,您可以键入M-o以调出操作,其中之一是kill.

于 2021-08-18T16:03:43.663 回答