简介

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 803C】Maximal GCD

    [题目链接]:http://codeforces.com/contest/803/problem/C [题意] 给你一个数字n;一个数字k; 让你找一个长度为k的序列; 要求这个长度为k的序列的所有数 ...

  2. ASP.NET CORE--WIN10上无法单步调试解决方法

    参考这篇文章 http://www.cnblogs.com/artech/p/debug-in-vs-code.html In order to be able to debug cross-plat ...

  3. rabbitMQ学习笔记(五) 消息路由

    生产者会生产出很多消息 , 但是不同的消费者可能会有不同的需求,只需要接收指定的消息,其他的消息需要被过滤掉. 这时候就可以对消息进行过滤了. 在消费者端设置好需要接收的消息类型. 如果不使用默认的E ...

  4. windows、linux劫持技术

    windows系统以下能够利用detours劫持 realse  模式劫持,调试的程序不能够 函数劫持能够实现的效果. 函数的劫持原理 我们怎样实现-detours detours是微软亚洲研究院出品 ...

  5. 通过meta标签改变浏览器内核做兼容

    <meta name="renderer" content="webkit|ie-stand|ie-comp" /> <meta http-e ...

  6. 为什么网络银行不支持GNU/Linux操作系统下的浏览器操作

    当年Linux没出时.银行就開始信息化建设了. 所为信息化,就是指用计算机工作了.服务客户了. 顺带着,慢慢的建server,连网(内部网).外网(网上银行) 这样下来, unix, dos, win ...

  7. YunOS曙光初现----看好阿里云OS----阿冬专栏!!

    阿里云os - YunOS 阿里云OS(YunOS)是阿里巴巴集团的智能手机操作系统,依托于阿里巴巴集团电子商务领域积累的经验和强大的云计算平台,基于LINUX开发. 魅族4阿里yun OS版已上市. ...

  8. 《C++编程思想》第四章 初始化与清除(原书代码+习题+解答)

    相关代码: 1. #include <stdio.h> class tree { int height; public: tree(int initialHeight); ~tree(); ...

  9. Project Euler:Problem 37 Truncatable primes

    The number 3797 has an interesting property. Being prime itself, it is possible to continuously remo ...

  10. ubuntu13.10升级到ubuntu14.04

    Upgrading from Ubuntu 13.10 To upgrade from Ubuntu 13.10 on a desktop system: Open Software Sources. ...