Emacs, внутреннее убийство процесса, любая команда?

Как убить внутренний процесс в Emacs? Например, я запускаю M-x shell.

Я могу проверить запущенные процессы с M-x list-processes но как я могу убить процесс из этого списка?

4 ответов


для этого нет привязки ключа по умолчанию; однако см. ответ pjammer -- list-processes+ включает (среди прочего) привязку kill к C-k -- а также ответ Жоао Таворы , который обеспечивает только привязку к убийству (для того же ключа).

event_jr указывает в комментариях, что вы можете использовать M -: (kill-process) RET убить настоящее буфера.

более вообще: вы можете использовать M -: (kill-process PROCESS) RET, где PROCESS "может быть процессом, буфером или именем процесса или буфера", причем эти имена отображаются в выходных данных list-processes. Имена процессов имеют приоритет над именами буферов, если у вас есть конфликт; поэтому, вероятно, лучше иметь привычку предоставлять имя процесса.

кроме того, Emacs 23+ имеет общий системный менеджер процессов (M-x proced), который больше похож на бег top, и который имеет привязку по умолчанию для отправки (произвольных) сигналов (k). Конечно, это может быть гораздо менее очевидно в этом списке, какой процесс вас интересует.


Edit: лучше поздно, чем никогда:) следующее включает 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)))

этот поток древний, но здесь очень быстрый хак, который отлично работает для меня

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

альтернативный способ:

можно использовать 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).

и это все.


похоже, что есть новый режим или добавить вы можете использовать вместо этого называется список процессов +