【问题标题】:How to kill a remote process without killing the shell (C-c C-c also kills the shell...)如何在不杀死shell的情况下杀死远程进程(C-c C-c也杀死shell...)
【发布时间】:2015-07-09 19:48:10
【问题描述】:

假设您通过本地 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)

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

【问题讨论】:

  • 我无法重现您描述的问题。如何逐步描述您的体验?
  • 谢谢,肖恩。我更新了问题,包括分步说明
  • 我也有同样的问题,使用 zsh 和 emacs 21.4.1 所以一个相当老的...
  • FWIW,我无法在 Emacs 24.3 中重现此内容,因此您现在可以重新使用 C-c C-c。
  • Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super User 或Unix & Linux Stack Exchange 会是一个更好的提问地方。另见Where do I post questions about Dev Ops?。

标签: emacs


【解决方案1】:

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

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

【讨论】:

  • 嗨,肖恩,感谢您的帮助。确实,C-q C-c RET 有效。我仍然想知道为什么C-c C-c 不起作用。我正在使用: GNU Emacs 24.0.92.1 (x86_64-apple-darwin, NS apple-appkit-1038.36) of 2012-01-15 on bob.porkrind.org [on Mac OS X 10.7.2]。
  • 谢谢@Sean,您应该在回答中包含this link,因为它解释了C-q 会将输入的下一个字符插入缓冲区。
  • @MikeH-R 该链接不再存在。所以从archive
【解决方案2】:

我不清楚您是否想从 emacs 中终止该命令,但您可以交替打开另一个连接或窗口(如果您使用的是 screen 或 tmux)并执行标准

ps aux | grep hungprocess

然后

kill hungprocess_pid

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-08
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    相关资源
    最近更新 更多