Emacs, внутренний процесс убийства, любая команда?
Как убить внутренний процесс в Emacs? Например, я запускаю M-x shell
.
Я могу проверить запущенные процессы с помощью M-x list-processes
, но как я могу убить процесс из этого списка?
4 ответа:
Для этого нет привязки ключа по умолчанию; однако см. ответ pjammer -
list-processes+
включает (среди прочего) привязку kill на C-k - а также ответ Joao Tavora-который обеспечивает только привязку kill (для того же ключа).Event_jr указывает в комментариях, что вы можете использовать M-:
(kill-process)
RET , чтобы убить процесстекущего буфера .В более общем виде: вы можете использовать M-:
В качестве альтернативы Emacs 23+ имеет общий системный менеджер процессов ((kill-process PROCESS)
RET , гдеPROCESS
" может быть a process, a buffer, or the name of a process or buffer", причем эти имена будут такими, какими они появляются в выходных данныхlist-processes
. Имена процессов имеют приоритет над именами буферов, если у вас есть конфликт; поэтому, вероятно, лучше иметь привычку предоставлять имя процесса.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-xlist-processes
RET ).Подтвердите, что процесс был убит повторением M-x
list-processes
RET ).И это все.
Похоже, что есть новый режим или дополнение, которое вы можете использовать вместо этого под названием list process +