网络断开导致SSH会话和服务端任务终止的原因及使用screen详解

在进行深度学习任务时,常常在本地通过ssh连接远程服务器进行炼丹任务。当我在pycharm上远程连接到服务器上进行训练时,由于网络不稳定使得SSH断开连接,我原以为服务器不会受影响。通过nvidia-smi命令发现GPU占用为0,这才发现任务终止了。
于是查阅了一些资料,整理至此。

一、网络断开连接导致服务器任务终止的原因

通过SSH连接到远程服务器进行操作时,如果本地网络断开,通常会导致SSH连接中断,进而导致服务器上的进程也停止运行。这是因为SSH连接是建立在一个会话(session)上的,当这个会话因为网络断开而结束时,会话内的所有进程都会收到一个SIGHUP信号,导致它们被终止

在Linux系统中,每个会话都有一个控制终端(controlling terminal),当SSH连接建立时,SSH客户端(指发起连接的一方,通常是指用户的本地计算机)成为远程会话的控制终端。如果SSH连接断开,控制终端丢失,导致会话结束,会话中的所有进程都会收到SIGHUP信号,除非这些进程被特别配置为忽略这个信号。

以下是对SSH会话的几个关键点理解:

  1. 独立的交互环境:每个SSH会话为用户提提供了一个独立的交互环境,类似于在本地控制台上的操作。用户可以在会话中启动多个程序,进行输入输出操作。

  2. 进程关系在SSH会话中启动的任何程序都是该会话的一部分。这些程序被称为会话的子进程,它们共享会话的输入输出。

  3. 控制终端:SSH会话通常与一个伪终端(pseudo-terminal)相关联,它模拟了一个物理终端的行为。这意味着即使在远程服务器上,用户也能像使用本地终端一样与程序进行交互。

  4. 生命周期:SSH会话有自己的生命周期,从用户通过SSH客户端连接到服务器并被认证开始,直到用户注销、关闭连接或服务器端强制断开连接结束。

  5. 信号传递当SSH会话结束时(例如,用户主动退出或网络问题导致连接断开),会话内所有进程都会收到一个SIGHUP(挂起)信号。默认情况下,这会导致所有子进程被终止

简单来说是网络断开时,系统会发送给会话内的所有子进程一个SIGHUP信号,会使得所有子进程终止。

二、使用screen命令解决

screen 是一个非常强大的工具,它允许用户在单个SSH会话中使用多个shell窗口(会话),并且能够在网络断开后保持会话和进程继续运行

工作原理

当启动screen时,它会创建一个新的会话,并在这个会话中启动一个shell。如果断开了SSH连接,screen会话仍然在服务器上运行。当重新连接时,可以重新附加到这个screen会话,继续你的工作
screen通过创建一个伪终端(pseudo-terminal)来实现这一点,它拦截了所有发送到前台进程的信号,如SIGHUP,这样即使SSH连接断开,这些信号也不会被发送到screen会话中的进程

使用步骤:

1. 安装screen

如果系统还没有安装screen,可以通过包管理器安装。对于基于Debian的系统(如Ubuntu),使用以下命令:

sudo apt-get update
sudo apt-get install screen

对于基于Red Hat的系统(如CentOS),使用以下命令:

sudo yum install screen

我之前安装好了,就不放安装截图了。

2. 启动一个新的screen会话:

通过SSH连接到远程服务器后,直接输入screen命令并按回车键,这将启动一个新的screen会话。你也可以为会话指定一个名称,以便之后更容易地重新附加到该会话:

screen -S mysession

记住是大写的S,结果如下:

会出现新的会话窗口。

3. 在screen会话中运行命令或程序:

screen会话中,可以像平常一样运行命令或启动程序。例如,你可以启动一个文本编辑器,或者开始一个长时间的编译过程。
比如切换到目标目录,运行一个耗时较长的深度学习训练的python程序。

python xx.py

此时代码已经运行了。

4. 分离screen会话:

当你需要暂时离开或断开SSH连接时,可以在screen会话中按下Ctrl-A,然后按D。这将使你从当前会话中分离出来,但会话及其中的进程仍然在后台继续运行。

Ctrl-A-D可以理解成离开这个会话。之后返回原本的终端界面。

5. 重新连接到screen会话

当你重新连接到服务器时,可以使用以下命令来列出所有可用的screen会话:

screen -ls

如下图

会话可以处于两种状态:Attached(已附加)和 Detached(已分离)
图中 hds_unet会话显示(Attached) ,表示当前与某个终端或SSH会话关联,而其他会话则在后台独立运行,等待用户重新附加

使用以下命令将之前关闭的mysession重新附加到之前的会话:

screen -r mysession

-r 参数

  • -r 参数用于重新附加到一个已经存在的 screen 会话。
  • 当你使用 screen -r session_name 命令时,如果 session_name 指定的会话已经存在并且处于 Detached(已分离)状态,这个命令会将你重新连接到这个会话,使其变为 Attached(已附加)状态。
  • 如果会话已经处于 Attached 状态,-r 参数将允许你加入到会话中,这样你就可以与其他用户共享同一个会话,并且可以看到相同的输出。

如果没有为会话指定名称,可以使用会话的ID来重新附加。
此时通过 screen -ls 命令查询mysession状态
如下图

Attached表明正在关联。

6. 关闭screen会话

当完成工作后,可以正常关闭screen会话中的所有程序,然后输入exit命令或按Ctrl-D来结束会话。此时通过 screen -ls 命令查询不到mysession。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/56152.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

稀土阻燃协效剂 - 阻燃

金士镧稀土阻燃协效剂的技术衬垫: 金士镧KingCela 稀土阻燃协效剂KCL-FR-06xx系列产品,凭借独特的稀土4f电子层结构, 可协效磷氮阻燃剂,卤系阻燃剂阻燃剂在高分子材料(橡胶,塑料,涂层,胶黏剂&a…

『网络游戏』服务器启动逻辑【16】

新建Visual Studio工程命名为NetGameServer 重命名为ServerStart.cs 创建脚本: 编写脚本:ServerRoot.cs 编写脚本:ServerStart.cs 新建文件夹 调整脚本位置 新建文件夹 新建文件夹网络服务 创建脚本:NetSvc.cs 编写脚本&#xff1…

使用 KVM 在 Xubuntu 上创建 Windows 10 虚拟机

目录 前言说明注意准备 iso官网思博主(嘻嘻)拖动到虚拟机里面启动 virt-manager创建虚拟机选择本地安装介质选择 iso配置 内存 和 CPU选择 创建的虚拟机 保存的位置启动虚拟机看到熟悉的 Win10界面前言 XUbuntu安装OpenSSH远程连接服务器 远程连接之MobaXterm安装使用 虚拟化技…

DS线性表之队列的讲解和实现(5)

文章目录 前言一、队列的概念及结构二、队列的实现队列节点和队列初始化销毁判断是否为空入队列出队列获取队头队尾数据获取队列元素个数 三、实际使用效果总结 前言 队列实现源代码   队列是我们遇到的第二个实用数据结构,栈和队列地位等同 一、队列的概念及结构…

一篇python常见的Pandas的数据功能的使用

当我们学习了如何使用 Pandas 进行数据的导入与导出,这为我们后续的数据处理打下了基础.此次我们将重点讨论数据选择与过滤.通过掌握这一部分的知识,你将能够轻松地从复杂的数据集中提取出所需的信息.接下来,我们将通过一些实例来逐步了解这些操作. 这里插播一条粉丝福利&#…

三、AOP

文章目录 1. AOP(概念)2. AOP(底层原理)2.1 AOP 底层使用动态代理2.2 AOP(JDK动态代理) 3. AOP(术语)3.1 连接点3.2 切入点3.3 通知(增强)3.4 切面 4. AOP操作…

Element中el-table组件设置max-height右侧出现空白列的解决方法

之前就出现过这个情况,没理过,因为不影响啥除了不美观...但今天看着实在是难受,怎么都不顺眼(可能是我自己烦躁--) 试了很多网上的方法,都不得行,后面发现了这篇文章,解决了! 感谢! Element中t…

SpringBoot人事系统:企业人才资源的智能管家

6系统测试 6.1概念和意义 测试的定义:程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为: 目的:发现程序的错误; 任务:通过在计算机上执行程序,暴露程序中潜在的错误。 另一个…

fastadmin 多商户模式下侧边栏跳转路径BUG

记录:仅作自己项目记录,在一个域名下部署多套项目时,若是多商户模式项目会出现跳转路径问题。 修改 \manystore\library\Auth.php 文件的 getSidebar 方法 // 1 改为: $v[url] isset($v[url]) && $v[url] ? $v[url] :…

关于WPF(Windows Presentation Foundation)中Grid控件

本文将从Grid控件的基础概念开始,逐步深入探讨其特性、用法、实例代码,以及最佳实践。 1. WPF和布局简介 WPF是一种用于构建Windows桌面应用程序的UI框架,它通过XAML(Extensible Application Markup Language)使开…

PDF编辑不求人!4款高效工具,内容修改从此变得简单又快捷

咱们现在生活在一个数字时代,PDF文件可不就是工作、学习还有日常生活中经常要用的东西嘛。但遇到那些需要改动的PDF文件,是不是就觉得有点头疼啊? 因为传统的PDF文件真的不好编辑,这确实挺烦人的。不过呢,我今天要给你…

文本语义检索系统的搭建过程,涵盖了召回、排序以及Milvus召回系统、短视频推荐等相关内容

大家好,我是微学AI,今天给大家介绍一下本文详细介绍了文本语义检索系统的搭建过程,涵盖了召回、排序以及Milvus召回系统的相关内容。通过使用PyTorch框架,我们提供了样例代码,以帮助读者更好地理解和实践。该系统具有广…

VR全景摄影的拍摄和编辑软件推荐

随着虚拟现实技术的不断进步,VR全景摄影逐渐成为商业、娱乐和教育等多个领域中的重要工具。通过专业的设备与软件,摄影师能够创作出沉浸式的360度全景作品,为观众提供身临其境的视觉体验。在这篇文章中,我们将介绍VR全景摄影的相关…

【vue+printJs】前端打印, 自定义字体大小, 自定义样式, 封装共享样式

效果示例 思维导图 目录 1,基本使用1, 依赖下载2, 页面导入3, 修改字体大小(可行但不推荐) 2, 自定义样式,字体大小1, 修改字体大小(推荐)2, 自定义样式3, 封装共享样式 3, 去除页面页脚内容4, 测试案例demo, 直接cv可用5, print-js的其他参数说明 1,基本使用 1, 依赖下载 …

MyBatis-Plus 之 typeHandler 的使用

一、typeHandler 的使用 1、存储json格式字段 如果字段需要存储为json格式,可以使用JacksonTypeHandler处理器。使用方式非常简单,如下所示: 在domain实体类里面要加上,两个注解 TableName(autoResultMap true) 表示自动…

无人驾驶打造“新丝路”,驭势科技在卡塔尔设立研发运营中心

在卡塔尔多哈的街头,除了身穿阿拉伯长袍的人群和悠闲的骆驼队伍之外,又将出现一道全新的风景线,那就是来自驭势科技的无人驾驶车。10月8日,在中关村京港澳青年创新创业中心的协助与对接下,驭势科技在卡塔尔科技园正式成…

<Project-8.1.1 pdf2tx-mm> Python 调用 ChatGPT API 翻译PDF内容 历程心得

原因 用ZhipuAI,测试用的PDF里,有国名西部省穆斯林,翻译结果返回 “系统检测到输入或生成内容可能包含不安全或敏感内容,请您避免输入易产生敏感内容的提 示语,感谢您的配合” 。想过先替换掉省名、民族名等&#xff…

计量校准工作中的误差评定与不确定度

计量校准的目的是确定测量仪器的误差和不确定度,以评估其测量结果的可靠性。误差评定和不确定度计算是计量校准过程中的重要步骤。 误差评定是指通过比较测量仪器的测量结果与已知标准值之间的差异,确定仪器的准确性和精度。误差可以分为系统误差和随机误…

【Java】I/O 操作详解

📃个人主页:island1314 ⛺️ 欢迎关注:👍点赞 👂🏽留言 😍收藏 💞 💞 💞 目录 1. 引言 🚀 2. File 类 📕 2.1 创建 File 对象 …

wpf实现新用户页面引导

第一步 第二部 部分代码: private void show(int xh, FrameworkElement fe, string con, Visibility vis Visibility.Visible) {Point point fe.TransformToAncestor(Window.GetWindow(fe)).Transform(new Point(0, 0));//获取控件坐标点RectangleGeometry rg new Rectangl…