Подтвердить что ты не робот

Как убить удаленный процесс, не убивая оболочку (C-c C-c также убивает оболочку...)

Предположим, вы работаете на удаленном сервере из локальной оболочки emacs (запущен с M-x shell). Если вы выполняете процесс, который занимает слишком много времени (например, ls в каталоге с огромным количеством файлов), вы хотели бы остановить этот процесс (в терминале можно использовать control-c). Я пробовал C-c C-c, но убил всю оболочку... Как я могу убить только запущенный процесс на удаленном сервере, а не всю оболочку?

Обновление

Шаг за шагом:

1) M-x shell (execute on local machine)
2) ssh [email protected] (execute on local machine)
3) sleep 60 (execute on remote machine)
4) C-c C-c (execute in the current shell)

= > вместо того, чтобы все еще находиться на удаленном хосте и просто убить команду сна, все удаленное соединение закрыто, и вы снова находитесь на своей локальной машине.

4b9b3361

Ответ 1

Когда я следую приведенным вами шагам, я возвращаюсь к приглашению удаленной оболочки. Я использую Emacs 23.1.1.

Я нахожу, что ввод C-q C-c RET также прерывает удаленный процесс, снова оставляя меня в приглашении удаленной оболочки. Вы можете попробовать это как альтернативный подход.

Ответ 2

Мне непонятно, хотите ли вы убить команду из emacs, но вы можете поочередно открывать другое соединение или окно (если вы используете экран или tmux) и выполнять стандартные

ps aux | grep hungprocess

а затем

kill hungprocess_pid

По какой-то причине я все думал о том, что такой метод не сработает и что я тоже удалю emacs. Я использовал этот метод несколько раз, когда я не настроил свой агент gpg pinentry при открытии зашифрованного файла gpg в emacs. Emacs/gpg попытается создать графический интерфейс и, следовательно, висит emacs, ожидая ввода в графическом интерфейсе, когда я удаленно удален.