简介

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. MySQL导入到SQLServer

    Mysql是在Linux环境服务器,MSSQL在windows服务器上 1.在MSServer中安装VPN 2.为VPN配置Mysql服务器账号 3.账号中的文件 4.在MSSQL服务器上安装mysq ...

  2. APS.NET webform中的isPostBack

    IsPostBack介绍Page.IsPostBack是一个标志:当前请求是否第一次打开. 调用方法为:Page.IsPostBack或者IsPostBack或者this.IsPostBack或者th ...

  3. 洛谷—— P2668 斗地主

    https://www.luogu.org/problem/show?pid=2668 题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54 ...

  4. lua 中string字符串的使用(string.len, string.char)

    table.keys 返回指定表格中的全部键. 格式: keys = table.keys(表格对象) 使用方法演示样例: local t = {a = 1, b = 2, c = 3} local ...

  5. Tokyo Tyrant(TTServer)系列(三)-Memcache协议

    通过Memcache协议使用ttserver  通过telnet 127.0.0.1 9032 telnet连接到到启动的实例. 下面我们通过add添加key为key1和value为value1的数据 ...

  6. iframe是否缓存页面探究

    近期手里有个项目须要用iframe来调用每天都会变化的页面,后来想到iframe会不会缓存页面呢.于是写了个demo论证了下,结果例如以下: iframe的src假设是静态页面,就有可能会缓存.由于静 ...

  7. 【VC编程技巧】窗口☞3.5对单文档或者多文档程序制作启动画面

    (一)概要: 文章描写叙述了如何通过Visual C++ 2012或者Visual C++ .NET,为单文档或者多文档程序制作启动画面.在Microsoft Visual Studio 6.0中对于 ...

  8. 使用CNN做电影评论的负面检测——本质上感觉和ngram或者LSTM同,因为CNN里图像检测卷积一般是3x3,而文本分类的话是直接是一维的3、4、5

    代码如下: from __future__ import division, print_function, absolute_import import tensorflow as tf impor ...

  9. Pycharm使用入门

    Python安装与Pycharm使用入门 一.安装Python 1.Linux下安装 一般系统默认已安装2.6.6版本,升级成2.7版本, 但 2.6 不能删除,因为系统对它有依赖,epel源里最新的 ...

  10. 子线程中刷新了UI

    This application is modifying the autolayout engine from a background thread, which can lead to engi ...