简介

Screen是一款用于命令行终端切换的自由软件
用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换
GNU Screen可以看作是窗口管理器的命令行界面版本
它提供了统一的管理多个会话的界面和相应的功能

主要优点

screen的优点有很多,但我认为最主要的是可以在网络连接中断后,不会丢失对已经打开命令行的控制
其他优点:
1.可以将需要长时间运行的脚本放到后台运行,虽然nohup和&都有这种功能,但他们不方便再次将其调到前台进行交互操作
2.可以将窗口共享,即多人可以共用一个窗口,任意一个人产生的输入输出,其他人都能看到,共享窗口可以设置密码保护(如何设置密码,我还没查到,希望知道的大神可以回复一下)
3. 被screen管理的终端,不是放到后台运行才可以保证进程不中断,即使在前台运行时,突然断电等其他原因导致终端突然关闭,该终端中运行的进程依旧会正常运行,使用screen命令可以继续调出该终端

常用参数和命令

-A    将所有视窗都调整为目前终端机的大小
-d    后接作业名或id,用于将在其他终端前台运行的窗口离线,也就是放到后台运行
-r    后接作业名或id,用于恢复离线窗口,也就是重新将该窗口调到前台运行。
-R   后接作业名或id,如果存在该离线窗口则调到前台运行,此时类似-r;如果不存在该离线窗口,则创建新窗口,作业名为指定的字符串;如果存在该窗口,但未离线,则创建同名窗口,但id不一样;这里可以看出 id 才是窗口的唯一标识
-S    后接作业名,用于指定窗口的作业名
-v    显示版本
-x    后接作业名或id,如果该screen作业处于离线状态,则恢复该离线窗口,此时类似于-r参数;如果该窗口处于前台运行,则当前终端与原终端共享该窗口,具体介绍见下方例子
-X    给 screen 传递指令。通常与-S配合,给指定的窗口发送指令;与stuff配合,表示在指定窗口内执行传递的命令。具体介绍见下方例子
-ls或--list    显示目前所有的screen作业
--wipe    检查目前所有的screen作业,并删除已经无法使用的screen作业
 
这里说明一下:
上面几乎所有参数,指定作业名时,可以不用指全,只要能够确定唯一的一个窗口,即使只写一个字母也可以
如果多个作业名都包含指定的字符串,且其中有一个作业名正好和指定的字符串完全相同,则会选择该窗口
如果多个作业名都包含指定的字符串,且其中没有一个作业名正好和指定的字符串完全相同,则会提示有多个符合的窗口,需要重新选择,并且列出所有符合的窗口
 
一点建议:
虽然前面介绍的很多参数都可以不用指定完整的作业名,但我还是建议在使用screen时尽量使用id,或者使用完整的作业名
最好保证作业名间不存在包含关系,如尽量不要让作业名为 test_screen 和 test_screen_a 同时存在
因为,可能会出现想杀死 test_screen 窗口,但是正好这个窗口不存在或者已经被杀死了,就会导致误杀 test_screen_a 的情况
 

常用命令

新建screen窗口:

screen                                     # 该命令会创建一个新窗口,名称随机命名,-S 可以用来指定窗口
screen -S test1 # 该命令创建一个名为test1的新窗口,默认进入bash,也就是我们终端刚打开时的样子
screen -S test2 /bin/bash /tmp/.sh # 该命令创建一个名为test2的新窗口,并运行脚本1.sh,如果脚本执行结束或者中断,这整个窗口将被删除
在交互界面离线窗口:
Ctrl+a 然后输入d,不用回车即可将screen窗口离线。但是在输入 Ctrl + a 后,界面是没有任何变化的,没有任何提示信息,直到输出d才会离线窗口
在其他终端将scren窗口离线:

screen -d test1
列出所有窗口:
screen -ls
恢复离线窗口:
screen -r test1
在 screen 管理的的窗口中,也可以恢复其他离线窗口:
该命令必须要求当前screen在bash界面,能输入相应命令,而不是运行一个占用前台的进程的screen窗口
该命令执行后,使用 screen -ls 显示的上一层的 screen 窗口仍在前台运行
这时候如果使用 exit 退出 test1 窗口,或者在其他终端使用 screen -d 离线 test1 窗口,就可以回到上一层窗口了,但如果是使用 ctrl + a 再输入 d 的方式离线 test1 窗口,那么该终端会完全退出 screen 管理的窗口,切到系统的终端,但使用 screen -ls 列出的刚才上一层的窗口依然是活跃的,这时候只能使用 screen -d 去离线窗口,然后再使用 screen -r 进入该窗口了
 
共享screen窗口:
screen -x test1
当一个screen窗口(譬如test1)在前台运行时,从另一个窗口执行以上命令,可以实现两个screen窗口显示信息完全一致
两个终端都可以操作该窗口,输入和输出会同时显示在所有终端上
 
清除无法使用的screen:
screen --wipe
杀死某个session:
screen -X -S test1 quit
或者在交互界面Ctrl+a,然后输入k

screen在脚本中的运用

screen的常用命令经常伴随着交互,但如果运用到脚本中,就不允许带有交互式的命令了
 
使用screen启动窗口同时离线运行:
screen -d -m -S test1 /bin/bash /tmp/.sh
该命令会开启一个test1的screen窗口运行/tmp/1.sh脚本,并将窗口离线
适用于作为一个服务的运行命令
这里 -m 必须加上,否则不允许直接创建一个离线的窗口
 
使用screen传递输入给离线窗口:
screen -X -S test1 stuff "THIS IS TEST\n"
命令会向窗口test1中输入“THIS IS TEST”字符串,并回车
 
这里如果不加上 stuff,则表示后面的内容为发给 screen 的命令(与直接在终端执行的命令不同,是给screen发送的指令)
如果加上 stuff,则表示在指定窗口的终端输入以上字符串,后面加上\n 表示回车
字符串中可以使用脚本中的变量,它会自动读取变量的值以后再传入到窗口执行
 
虽然上面提到的 "screen -X -S test1 quit" 命令也能退出窗口,但该命令直接跟screen发送指令,类似于kill杀死该窗口,窗口中运行的服务不会平缓关闭,存在丢数据的风险
 
如果自己运行的服务在前台运行,且收到quit或者其他指令后会平缓退出,可以在加上 stuff 后接上命令,这样的退出会可控一点

窗口管理工具 screen的更多相关文章

  1. SSH远程会话管理工具 - screen使用教程

    一.screen命令是什么? Screen是一个可以在多个进程之间多路复用一个物理终端的全屏窗口管理器.Screen中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个s ...

  2. IDEA04 工具窗口管理、各种跳转、高效定位、行操作、列操作、live template、postfix、alt enter、重构、git使用

    1 工具窗口管理 所有的窗口都是在view -> tools windows 下面的,这些窗口可以放在IDEA的上下左右各个位置:右键某个窗口后选择move to 即可进行位置调整 2 跳转 2 ...

  3. [.net 面向对象程序设计进阶] (22) 团队开发利器(一)简单易用的代码管理工具VSS

    [.net 面向对象程序设计进阶] (22) 团队开发利器(一)简单易用的代码管理工具VSS 本篇要点:在进阶篇快要结束的时候说说源代码管理器,我们的开发,不是一个人可以完成的事,团队协作很重要,而且 ...

  4. Git代码管理工具

    Git代码管理工具 Git 是分布式的源代码管理工具,这点区别于svn -让源代码可以被追溯,主要是记录了每次的更新了什么,如果新版本不想用,那么则可以退回之前的版本 -Git 是Linux之父当年为 ...

  5. windows下运行的linux服务器批量管理工具(带UI界面)

    产生背景: 由于做服务器运维方面的工作,需要一人对近千台LINUX服务器进行统一集中的管理,如同时批量对LINUX服务器执行相关的指令.同时批量对LINUX服务器upload程序包.同时批量对LINU ...

  6. 安装 SQL SERVER 2008 必须使用 "角色管理工具" 错误 的 解决方案 (转)

    刚在服务器(Win2008)上安装SqlServer2008的时候出现了这么一个报错——必须使用“角色管理工具”安装或配置Microsoft .NET Framework 3.5 SP1.一开始以为是 ...

  7. 添加数据源,管理工具--数据源(ODBC),点击添加不显示该驱动

    win7系统下或者64位系统下,安装完mysql-connector-odbc驱动后,直接进入:管理工具--数据源(ODBC),点击添加不显示该ODBC驱动 问题解决如下: C:\Users\Admi ...

  8. 编码神器——Sublime Text 包管理工具及扩展大全

    Sublime Text 是程序员们公认的编码神奇,拥有漂亮的用户界面和强大的功能,例如代码缩略图,多重选择,快捷命令等.还可自定义键绑定,菜单和工具栏.Sublime Text 的主要功能包括:拼写 ...

  9. 图解Android - Android GUI 系统 (2) - 窗口管理 (View, Canvas, Window Manager)

    Android 的窗口管理系统 (View, Canvas, WindowManager) 在图解Android - Zygote 和 System Server 启动分析一 文里,我们已经知道And ...

随机推荐

  1. 2、Ansible配置文件详解

    0.配置文件 两个核心文件:ansible.cfg和hosts文件,默认都存放在/etc/ansible目录下. ansible.cfg:主要设置一些ansible初始化的信息,比如日志存放路径.模块 ...

  2. Hibernate Session操作

    1.增加 @Test public void add(){ Configuration cfg=new Configuration().configure(); SessionFactory fact ...

  3. 基于Tags的简单内容推荐的实现

    原来为了简单方便,自己小网站上的文章页的相关内容推荐就是从数据库里随机抽取数据来填充一个列表,所以一点相关性都没有,更本没有办法引导用户去访问推荐内容. 算法选择 如何能做到相似内容的推荐呢,碍于小网 ...

  4. 关于NumPy的坑

         初次接触NumPy的时候,感叹这个功能的强大,实现了Python对矩阵的运算,但在写一个项目的时候,发现了一个巨坑无比的情况     分隔符=================     对于被 ...

  5. 2019-03-28 git github SSH配置,上传下载操作

    1.通过git获取scrapy源码,并安装到系统里面 https://git-scm.com/download/win 下载无脑安装啊(C:\Program Files\Git),进入git bash ...

  6. SpringMVC在对应绑定不同实体,但具有相同属性名的解决方案....

    在springmvc中,可以对前台传递过来的参数进行与后台实体绑定(第二种方式相对较好). 比如: 前台页面: <form action="${pageContext.request. ...

  7. SpringBoot 配置 @ConfigurationProperties 与 @Value 区别

    一.SpringBoot 配置 @ConfigurationProperties 与 @Value 区别 配置文件 yml 还是 properties 他们都能获取到值: 如果说,我们只是在某个业务逻 ...

  8. Makefile错误总结

    自己在做嵌入式驱动时,编写makefile文件是犯的错及解决办法 问题1:makefile 3 missing separator.stop: 问题2:Nothing to be done for ' ...

  9. MySQL多线程数据导入导出工具Mydumper

    http://afei2.sinaapp.com/?p=456 今天在线上使用mysqldump将数据表从一个库导入到另外一个库,结果速度特别慢,印象中有个多线程的数据导入导出工具Mydumper,于 ...

  10. 洛谷—— P1457 城堡 The Castle

    https://www.luogu.org/problem/show?pid=1457 题目描述 我们憨厚的USACO主人公农夫约翰(Farmer John)以无法想象的运气,在他生日那天收到了一份特 ...