云计算百科
云计算领域专业知识百科平台

关掉ssh终端连接之后,为什么服务器上的编译还在跑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}

关掉ssh终端连接之后,为什么服务器上的编译还在跑

备份、编译、训练跑到一半,笔记本合上,或者浏览器标签关了。再连上去,这条命令没了,机器上的进程也不在了。

腾讯云 OrcaTerm 是连到你自己 Linux 服务器的终端,Web 端和桌面客户端都能开。它的托管会话用来留这种长时间任务:页面可以关,任务继续在服务器上跑。入口在左侧连接管理,按服务器展开。官方说明在托管会话。

普通的 SSH 会话里,壳和任务挂在这次连接的终端上。连接一断,会话首进程收到 SIGHUP。交互式 bash 退出前会把 SIGHUP 再发给它的任务。进程消失,是因为这条终端没了。

托管会话把任务挪到服务器上的 tmux 里。关掉页面、断网、退出客户端,断的是你这边的连接。tmux 会话还在那台 Linux 上,任务的终端还在。下次从连接管理里进同一条会话,看到的是它现在的画面,不是一段事后补上的日志。

断线时,谁还握着终端

普通终端托管会话
任务的终端属于谁 这一次 SSH / TAT 连接 服务器上的 tmux 会话
关掉页面 连接挂断,壳收到 SIGHUP,任务一起退出 只离开客户端。会话留在服务器上
再打开 一条新的空终端 进入原来的会话,任务还在跑
怎么结束任务 关掉终端就会结束 在连接管理里删除这条托管会话

nohup 也能躲开 SIGHUP,输出进文件,终端上的现场没了。自己装的 tmux 能留下现场,但前缀键、状态栏和分屏都是 tmux 自己的界面。托管会话用 tmux 的控制模式(tmux -CC)挂上去:协议负责把每个窗格的输出和按键传回来,屏幕仍是 OrcaTerm 的终端。控制模式从 tmux 1.8 就有,中文和其它非 ASCII 输入要到 2.3 才稳妥,OrcaTerm 按 2.3 作为下限。服务器上没有合适的 tmux 时,安装会话恢复会检测并装上。

会话活在服务器上,所以换一台电脑、或者从 Web 端换到客户端,进的是同一条。好几个人也可以同时进入这一条,看到的是同一块屏幕。

先装上,再新建

只对 Linux 上的 Shell 终端生效,连接方式是 SSH 或腾讯云自动化助手 TAT。Windows 远程桌面、Windows 实例、本机终端没有这一项。

在终端里右键,增强功能里安装,勾上会话恢复。装好之后:

  • 打开连接管理,选中这台服务器。
  • 展开后点「打开托管会话」。这台机器上已经有会话时,点右侧的加号。
  • 填一个不重复的名字,新建并进入。
  • 之后在这个终端里跑的命令才受保护。可以先跑一个 ping,关掉页面,再从同一台服务器的托管会话列表里进去。ping 还在跳,不是重新执行了一次。

    普通终端里的命令不在此列。那边关掉,会话结束,除非命令自己用 nohup 或 screen 脱离了终端。

    两个和「没断」容易混在一起的现象

    再进去时,恢复的是窗格里当前这一屏。已经滚出这块屏幕的输出,在 tmux 自己的历史里,用 Ctrl+B 再按 [ 翻页。进错了同名会话,也会看成「刚才的输出没了」。

    托管会话里鼠标默认归 tmux,左键用来切窗格,不能直接拖选复制。按住 Alt(macOS 上是 Option)再拖,这一下把鼠标交回终端,松开修饰键之后再复制。松开后的第一次点击会把鼠标还回 tmux。普通终端不用按住修饰键。

    删除是另一件事。连接管理里对这条会话点删除并确认,tmux 会话被关掉,里面正在跑的任务一起停。卸载会话恢复之前,要先关掉还开着的托管会话。

    什么时候用

    任务要跑很久,而且你还想回来看当时的目录、进程和后半段输出。编译、备份、数据同步、训练,都适合放进一条命名好的托管会话里。看一眼就走的命令,留在普通终端里即可。

    在这里插入图片描述

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 关掉ssh终端连接之后,为什么服务器上的编译还在跑
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!