如何在不杀死shell的情况下杀死远程进程(C-c C-c也会杀死shell ...)

时间:2012-01-20 18:15:27

标签: emacs

假设您使用本地emacs shell(以M-x shell开头)在远程服务器上工作。如果执行的过程花费的时间太长(例如,在包含大量文件的目录中为ls),您希望停止该过程(在终端中将使用control-c)。我尝试了C-c C-c,但这会杀死整个shell ...我怎样才能杀死远程服务器上的运行进程而不是整个shell?

更新

步骤一步:

1) M-x shell (execute on local machine)
2) ssh mylogin@myremotemachine.foo.bar (execute on local machine)
3) sleep 60 (execute on remote machine)
4) C-c C-c (execute in the current shell)

=>而不是仍然在远程主机上,只是睡眠命令被杀死,整个远程连接关闭,你再次在本地机器上。

2 个答案:

答案 0 :(得分:21)

当我按照您列出的步骤进行操作时,我发现自己回到了远程shell提示符。我正在使用Emacs 23.1.1。

我发现键入 C-q C-c RET 也会中断远程进程,再次让我处于远程shell提示符下。您可以尝试将其作为替代方法。

答案 1 :(得分:-1)

我不清楚你是否要从emacs中删除命令,但你可以交替打开另一个连接或窗口(如果你使用的是屏幕或tmux)并执行标准

ps aux | grep hungprocess

然后

kill hungprocess_pid

出于某种原因,我一直认为这样的方法不起作用,而且我最终也会删除emacs。当我在emacs中打开gpg加密文件时没有设置我的gpg pinentry代理时,我多次使用过这种方法。 Emacs / gpg将尝试生成一个GUI,因此挂起emacs,等待我远程ssh的进入GUI中的输入。