简介

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. Codeforces 787A The Monster( 拓展欧几里德 )

    链接:传送门 题意:ok 题意略 思路:将问题转化成求 b + a * x = d + c * y,简单拓欧,但是需要注意的是 x >= 0 且 y >= 0 /************* ...

  2. [tyvj 1071] LCIS

    题目描述 熊大妈的奶牛在小沐沐的熏陶下开始研究信息题目.小沐沐先让奶牛研究了最长上升子序列,再让他们研究了最长公共子序列,现在又让他们要研究最长公共上升子序列了. 小沐沐说,对于两个串A,B,如果它们 ...

  3. [LUOGU]P4098[HEOI2013]ALO

    BZOJ上的权限题,流下了贫穷的泪水... 可持久化trie的题. 一开始zz了,看错了题,以为是要把所有的宝石缩起来,后来仔细一看好像只缩一次...昨天刷了一晚上的语文病句题白做了... 这样的话就 ...

  4. CentOS 7下搭建高可用集群

    一 .安装集群软件 必须软件pcs,pacemaker,corosync,fence-agents-all,如果需要配置相关服务,也要安装对应的软件. 二.配置防火墙1.禁止防火墙和selinux# ...

  5. 【hihocoder 1317】搜索四·跳舞链

    [题目链接]:http://hihocoder.com/problemset/problem/1317 [题意] [题解] dfs就能过吧. 在选取的时候; 把选取的这一行,占据的列,列的权值+1; ...

  6. ElasticSearch 深度分页解决方案

    常见深度分页方式 from+size 另一种分页方式 scroll scroll + scan search_after 的方式 es 库 scroll search 的实现 常见深度分页方式 fro ...

  7. C#--二维码生成代码

    需要用到ThoughtWorks.QRCode.dll文件 string str = Server.UrlDecode(Request.QueryString["id"]); QR ...

  8. muduo库源码剖析(二) 服务端

    一. TcpServer类: 管理所有的TCP客户连接,TcpServer供用户直接使用,生命期由用户直接控制.用户只需设置好相应的回调函数(如消息处理messageCallback)然后TcpSer ...

  9. c++ 设计模式之简单的工厂模式

    调试环境:vs2010 // test0.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> ...

  10. 让VMware ESXi虚拟交换机支持VLAN

    眼下虚拟化应用比較广泛,通常情况下.一台物理主机在安装VMware ESXi或Hyper-V虚拟机软件后.能够在一台物理主机上创建多个虚拟机,而且创建的每一个虚拟机能够像原来的物理一样对外提供服务,这 ...