如何终止 SSH 中挂起的进程?

如何终止 SSH 中挂起的进程?

我与在 Amazon AWS 上运行的虚拟机有一个 SSH 会话。

我运行的程序之一挂起并冻结了 SSH 终端。

所以我打了Enter+ ~+.

现在,当我尝试连接到我的机器时,它说连接超时。

  1. 这是否意味着连接仅从客户端终止并且在服务器上仍然处于活动状态?如果是这样,我如何创建新连接?
  2. Ctrl+C不适用于 SSH shell。这是否意味着无法在不终止 SSH 会话的情况下终止挂起的命令?

答案1

您可以向进程发送 SIGSTOP(大多数 shell 用于Ctrl-Z此目的),这将告诉当前进程暂停其当前状态。然后,您将返回到 shell 命令提示符。然后,您可以使用该命令查看哪些作业已暂停jobs,然后使用该kill命令终止该进程。如果该进程在输出列表中排名第一,那么您将发出kill -TERM %1(并再次jobs检查它是否已消失)。jobs可能必须发送 SIGKILL ( kill -KILL %1)。

作业控制的简单指南可以在以下位置找到:

http://en.wikibooks.org/wiki/A_Quick_Introduction_to_Unix/Job_Control

答案2

当您终止与 的连接时~.,服务器可能不会立即注意到。最终它会发送一条 keepalive 消息(“嘿,客户端,我有一段时间没有收到你的消息了,你还在吗?”),检测到没有答案,然后关闭终端,向前台进程组领导发送 SIGHUP。

Ctrl+C通过 SSH 工作与不使用 SSH 一样。

进程崩溃不会阻止您打开新连接。

从您描述的症状来看,是整个虚拟机由于某种原因脱机了。也许操作系统崩溃了,也许它的网络配置被破坏了,也许某些防火墙阻止了你,也许亚马逊终止了你的帐户和你的虚拟机……你所能知道的是,现在你的虚拟机无法访问。检查管理控制台是否有任何线索。如果您的虚拟机看起来应该正在运行,但实际上并未运行,请联系 Amazon 支持。

相关内容