mathlete
mathlete

Reputation: 6692

How to kill a remote process without killing the shell (C-c C-c also kills the shell...)

Assume you work on a remote server from a local emacs shell (started with M-x shell). If you execute a process which takes too long (for example an ls in a directory with a huge amount of files), you would like to stop that process (in the terminal one would use control-c). I tried C-c C-c but that kills the whole shell... How can I only kill the running process on the remote server and not the whole shell?

Update

Step-by-step:

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)

=> instead of still being on the remote host and just the sleep command being killed, the whole remote connection is closed and you are on your local machine again.

Upvotes: 12

Views: 7544

Answers (2)

N Klosterman
N Klosterman

Reputation: 1251

It is unclear to me if you want to kill the command from within emacs, but you could alternately open another connection or window (if you are using screen or tmux) and perform the standard

ps aux | grep hungprocess

and then

kill hungprocess_pid

For some reason I kept thinking that such a method wouldn't work and that I'd end up taking down emacs as well. I have used such a method multiple times when I haven't set up my gpg pinentry agent when opening a gpg encrypted file in emacs. Emacs/gpg will try to spawn a GUI and therefore hangs emacs, waiting for input in the GUI when I am remotely ssh'ed in.

Upvotes: -1

Sean
Sean

Reputation: 29790

When I follow the steps you listed, I find myself back at the remote shell prompt. I'm using Emacs 23.1.1.

I find that typing C-q C-c RET also interrupts the remote process, again leaving me at the remote shell prompt. You might try that as an alternate approach.

Upvotes: 22

Related Questions