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

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

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


person Linkas    schedule 16.05.2012    source источник


Ответы (4)


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

(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!")))))
person Joao Tavora    schedule 03.08.2013

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

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

И это все.

person Paulo Tomé    schedule 13.05.2013

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

person pjammer    schedule 17.05.2012

person    schedule
comment
если вы находитесь в буфере, с которым связан процесс, то (kill-process) будет работать без спецификации буфера. - person event_jr; 17.05.2012
comment
это, похоже, не применяется, если у процесса нет связанного буфера (больше), например, когда вы убили буфер, но это не вызвало уничтожение фактического процесса, что иногда может иметь место. - person Erik Kaplun; 03.10.2015
comment
(kill-process ...) у меня не сработало в результате (make-network-process ...). Ответ Пауло Томе на использование (delete-process ...) был уловкой. Похоже, что list-processes+ также использует (delete-process ...). - person chwarr; 17.02.2016
comment
Что делает установка свойства interactive-form? Это похоже на advice тип функциональности, но не могли бы вы объяснить, как это работает? Кажется, это изменило бы определение, как если бы для функции было указано interactive (...)? Таким образом, это в основном делает kill-process интерактивным и подсказывает пользователю перед убийством? Требуется ли nil в конце? - person Miserable Variable; 08.09.2020
comment
@MiserableVariable Да, это назначение формы (interactive...) функции, чтобы сделать ее командой. Все, что предшествует nil в моем коде, просто выбирает, сигнализировать ли об ошибке до того, как остальная часть функции получит шанс запуститься. Если это пройдет, nil — это фактический список аргументов, который я возвращаю для интерактивного вызова (т. е. пустой список, поскольку все аргументы функции являются необязательными, и я не заполняю ни один из них). Если бы я не сказал об этом явно, я бы оказался во власти любого значения, которое вернула предыдущая форма. - person phils; 09.09.2020
comment
Вы также можете вернуть (list proc) вместо nil, чтобы использовать объект процесса, показанный в интерактивной подсказке явно, а не неявно. Результат тот же, но явная версия делает вещи более очевидными. - person phils; 09.09.2020