我在某个平台上购买了一个云服务器,LINUX操作系统无图形化界面,硬盘空间较小。虽然在平台上可以通过其自带网页版VNC界面登陆SHELL进而操控云主机,但是每次需要操控都得打开网页登陆进平台,然后再进行一系列点击操作才能进入VNC界面,有点繁琐。并且有时出门在外,使用手机浏览器不是很好的兼容VNC界面,所以一般情况下我习惯于通过SSH客户端登陆SHELL。但是有个问题是,比如我想在云主机上运行一个神经网络训练程序,可能这个程序要跑12小时甚至更久,我不可能一直开着ssh客户端,但是我关闭了这个客户端,这个SHELL也随之湮灭了,训练进程也被杀了。所以我想有没有一种方法能在ssh中暂时将这个shell后台运行,然后下次登陆ssh时,可以将这个shell重新调回前台?通过万能的度娘,我找到了一个能实现功能的命令screen。

screen命令在Debian/Ubuntu系列系统中,可以直接通过apt下载:

sudo apt-get install screen

screen可以开启虚拟SHELL,在使用时,将其调到前台,当需要关闭ssh时,先将这个虚拟shell放在后台,当然,放到后台,在此shell中的程序将继续运行,产生的输出也会记录在这个虚拟shell中。下次再次登陆SSH时,通过命令将这个虚拟SHELL调到前台即可继续上次操作 ,并且程序产生的日志和控制台处处都不会丢。

当我们需要创建一个虚拟的SHELL窗口时,使用以下命令,shell_name可以选自己喜欢的名字:

screen -S shell_name

输入命令后, 窗口重新变为刚登陆时的状态:

这个控制台就是新创建的虚拟SHELL了。我们在这个SHELL中创建一个新文件,然后对这个文件进行编辑。

此时,文件还没编辑完,但是有其它事情需要处理,我们需要关闭SSH客户端。这时我们就需要将这个虚拟SHELL放到后台运行,依次按下这两个快捷键:

Ctrl+a    d

我们重新返回了SSH为我们开辟的SHELL,并且在这个上面一行显示我们与5749.test分离,意思就是将这个名称为test、ID为5749的虚拟shell放在了后台。此时就可以安心关闭shell了。

在我们重新登陆上SSH时,怎样重新将这个虚拟SHELL调回前台呢?在这个之前,先说一下如何查看当前创建的所有虚拟SHELL:

screen -ls

我目前有两个虚拟SHELL,ID分别为5749和18969,状态均为detached。那么现在将ID为5749,也就是刚刚还没完成的那个文档所在的SHELL打开:

screen -r 

又重新回到了这个界面,我们可以继续编辑我们的文档。

这些就是基本用法,screen命令还有更多强大的用法,我把命令格式放在这里,供需要的朋友们查阅:

这里需要注意,在真实SHELL中,我们用控制台命令进行虚拟SHELL的控制;但是当虚拟控制台在前台时,我们需要用快捷键,快捷键均以Ctrl+A开始。

更全的命令参考这里

---------在虚拟控制台之外可以用的命令----------
$> screen [-AmRvx -ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s ][-S <作业名称>] -A  将所有的视窗都调整为目前终端机的大小。
-d <作业名称>  将指定的screen作业离线。
-h <行数>  指定视窗的缓冲区行数。
-m  即使目前已在作业中的screen作业,仍强制建立新的screen作业。
-r <作业名称>  恢复离线的screen作业。
-R  先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
-s  指定建立新视窗时,所要执行的shell。
-S <作业名称>  指定screen作业的名称。
-v  显示版本信息。
-x  恢复之前离线的screen作业。
-ls或--list  显示目前所有的screen作业。
-wipe  检查目前所有的screen作业,并删除已经无法使用的screen作业。 --------在虚拟控制台内可以用的快捷键-----------
C-a ? -> 显示所有键绑定信息
C-a c -> 创建一个新的运行shell的窗口并切换到该窗口
C-a n -> Next,切换到下一个 window
C-a p -> Previous,切换到前一个 window
C-a .. -> 切换到第 .. 个 window
Ctrl+a [Space] -> 由视窗0循序切换到视窗9
C-a C-a -> 在两个最近使用的 window 间切换
C-a x -> 锁住当前的 window,需用用户密码解锁
C-a d -> detach,暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态,此时在 screen session 里,每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。
C-a z -> 把当前session放到后台执行,用 shell 的 fg 命令则可回去。
C-a w -> 显示所有窗口列表
C-a t -> time,显示当前时间,和系统的 load
C-a k -> kill window,强行关闭当前的 window
C-a [ -> 进入 copy mode,在 copy mode 下可以回滚、搜索、复制就像用使用 vi 一样
C-b Backward,PageUp
C-f Forward,PageDown
H(大写) High,将光标移至左上角
L Low,将光标移至左下角
移到行首
$ 行末
w forward one word,以字为单位往前移
b backward one word,以字为单位往后移
Space 第一次按为标记区起点,第二次按为终点
Esc 结束 copy mode
C-a ] -> paste,把刚刚在 copy mode 选定的内容贴上

LINUX使用SSH远程终端时,如何将运行时间长的程序在后台挂起,下次SSH登陆时继续使用同一个SHELL?的更多相关文章

  1. 01 . Go语言的SSH远程终端及WebSocket

    Crypto/ssh简介 使用 下载 go get "github.com/mitchellh/go-homedir" go get "golang.org/x/cryp ...

  2. 一个优秀的SSH远程终端工具

    SSH远程终端工具是一款在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的.向我们操控集群的时候,如果每台机器都安装一个显示器和键盘也是一个不小的花费,而远程终端 ...

  3. 【Linux】使用xshell登陆时密码框为灰色,无法输入密码

    使用xshell登陆时,出现以上情况,那么这到底值咋回事呢?经过查询以后发现是服务器端设置问题,解决办法如下: vi /etc/ssh/sshd_config 接着保存退出,然后重启sshd服务 se ...

  4. Linux 系统运行着许多子系统和应用程序。您可以使用系统日志记录从启动时就收集有关运行中系统的数据。有时

    概述 在本教程中,您将学习以下内容: 配置 syslog 守护程序 了解标准设施.优先级和操作 配置日志轮换 了解 rsyslog 和 syslog-ng 系统内部发生了什么 Linux 系统运行着许 ...

  5. linux 让程序在后台运行的几种可靠方法

    我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败.如何让命令提交后不受本地关闭终端窗口/网络断开 ...

  6. linux启动后自动登录并运行自定义图形界面程序

    在<Ubuntu CTRL+ALT+F1~F6 进入命令模式后不支持中文显示的解决办法>一文中提到linux启动在以后运行一个独占显示器的图形程序的两种办法. 1.不启动xserver,使 ...

  7. Linux下如何让jar包程序在后台一直执行

    Linux下如何让Jar包程序在后台一直执行 shell命令 nohup java -jar xxx.jar & &:让程序后台执行. nohub:让程序控制台输出转移到nohub.o ...

  8. linux下删除大量文件提示参数过长解决办法

    linux下删除大量文件提示参数过长解决办法:在当前目录下rm -rf * 在linux中删除大量文件时,直接用rm会出现:-bash: /bin/rm: 参数列表过长的错误. 这时可以用find命令 ...

  9. linux nohup命令使程序在后台运行的方法

    在linux操作系统中从后台一直运行某个程序的方法,就是使用nohup命令了. Unix/Linux下一般比如想让某个程序在后台运行,很多都是使用 & 在程序结尾来让程序自动运行. 比如要运行 ...

随机推荐

  1. redis集群redis-cluster搭建

    redis集群搭建--参考微信公众号(诗情画意程序员):https://mp.weixin.qq.com/s/s5eJE801TInHgb8bzCapJQ 这是来自redis官网的一段介绍,大概意思就 ...

  2. 回炉重造之重读Windows核心编程-001-错误处理

    Windows处理错误靠的是API的返回值,类型不止一种种: VOID,函数不可能失败,Windows API的返回值很少是这个情况. BOOL,如果函数失败,则返回值是0,否则返回是非零值.不要测试 ...

  3. MAC使用命令行解压rar

    使用homebrew安装unrar brew install unrar 安装完成后cd到rar文件目录,使用终端命令解压 unrar x 需要解压的文件

  4. gcc 与g++

    which gcc     查看gcc           主要针对 .c which g++    查看g++            主要针对  .cpp yum install gcc  安装gc ...

  5. elementui_day02

    Elementui_day02 1. maven多模块搭建 1.1 搭建多模块的好处 1. 方便维护(代码增加,拆分越细,越好维护) 2. 有些公共的内容(BaseDomain.BaseService ...

  6. SpringBoot项目自定义浏览器选项卡左上角图标(favicon.ico)-sunziren

    favicon.ico是浏览器选项卡左上角的图标,可以放在静态资源路径下或者类路径下面.静态资源路径下的favicon.ico优先级高于类路径下的favicon.ico. 可以使用在线转换网站http ...

  7. Scout YYF I POJ - 3744【矩阵乘法优化求概率】

    题意: 一条路上有 $n$ 个地雷,YYF 从位置 $1$ 出发,走一步的概率为 $p$,走两步的概率是 $(1-p)$.求 YYF 能顺利通过这条路的概率. 数据范围: $1\leq n \leq ...

  8. Kemaswill 机器学习 数据挖掘 推荐系统 Python optparser模块简介

      Python optparser模块简介

  9. Wannafly Winter Camp 2020 Day 6A Convolution - NTT

    求 \(\sum_{i=1}^n \sum_{j=1}^n 2^{a_ia_j}\) Solution 化简一下 \[ 2^{a_ia_j} = p^{(a_i+a_j)^2-a_i^2-a_j^2} ...

  10. 2018 IEEE极限编程大赛 题解

    去年742,今年72,也算一种小小的进步. 明年前30(笑 1. Drawing Rooted Binary Trees 给定一个树的中序和前序的遍历,要求输出这棵树(包括空格的) #include ...