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).
и это все.
похоже, что есть новый режим или добавить вы можете использовать вместо этого называется список процессов +