文章更新
- 20170330-初次成文。
- 20200315-更新最新的使用心得,简化了一些命令。
为什么会有这篇文章
在linux服务器上运行长时占用的任务,当网络连接断开的时候,任务也就断了,screen可以让连接保持,即使你的xshell连接断开,也不影响screen中运行的任务。
screen命令是什么?
Screen是一个可以在多个进程之间多路复用一个物理终端的全屏窗口管理器。Screen中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的telnet/SSH连接窗口那样。
如何安装screen
除部分精简的系统或者定制的系统大部分都安装了screen命令,如果没有安装,CentOS系统可以执行
yum install screen
Debian/Ubuntu系统执行:apt-get install screen
screen使用方法
screen用来解决那些需要长时间安装的程序,比如lnmp时,或者执行某个长时的后台应用,比如提供ngrok服务。
创建screen会话
可以先执行:screen -S ngrok ,screen就会创建一个名字为ngrok的会话。
暂时离开,保留screen会话中的任务或程序
当需要临时离开时(会话中的程序不会关闭,仍在运行)可以用快捷键Ctrl+a d(即按住Ctrl,依次再按a,d)
恢复screen会话
当回来时可以再执行执行:screen -r ngrok 即可恢复到离开前创建的ngrok会话的工作界面。如果忘记了,或者当时没有指定会话名,可以执行:screen -ls screen会列出当前存在的会话列表。
11791.ngrok [Detached]
11791.ngrok即为刚才的screen创建的ngrok会话,目前已经暂时退出了ngrok会话,所以状态为Detached
当使用screen -r 11791.ngrok后状态就会变为Attached,11791是这个screen的会话的进程ID,恢复会话时也可以使用:screen -r 11791
关闭screen的会话
一般来说,直接使用Ctrl+C命令即可结束进行不间断的进程并且让screen返回,但是如果有其它意外情况,可以使用命令exit
会提示:[screen is terminating],表示已经成功退出screen会话。
另外,screen -X -S [session # you want to kill] quit也可以彻底关掉一个detached的会话。
使用screen来进行远程演示
这是screen的一个非常有趣的用法,首先演示者先在服务器上执行 screen -S test 创建一个screen会话,观众可以链接到远程服务器上执行screen -x test 观众屏幕上就会出现和演示者同步。
常用快捷键
- Ctrl+a c :在当前screen会话中创建窗口
- Ctrl+a d :从当前正在运行的会话窗口返回
- Ctrl+a w :窗口列表
- Ctrl+a n :下一个窗口
- Ctrl+a p :上一个窗口
- Ctrl+a 0-9 :在第0个窗口和第9个窗口之间切换
screen里面如何用鼠标滚轮来卷动窗口内容
在screen里面,因为每个窗口的历史内容已经被screen接管了,所以使用鼠标滚轮,无法往上下方向滚动,二是会在命令行出现之前的历史命令。
解决办法,就是在~/.screenrc里面添加(没有的话,vim或者touch创建一个)
termcapinfo xterm* ti@:te@
重开一个screen即可。