在写这篇文章的时候,我意识到我可能在总结一些过时的东西。
GNU Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。
Screen 可以多开窗口并灵活切换,然而这一点它不如 Tmux 灵活和可扩展。因为每个窗口之间进程互不影响,它也可以起到在后台运行程序的作用,然后这一点它又不如 nohup 来的方便。比上不足比下有余,然而及时是过时,但是没有被淘汰,那就有总结的必要,也正因为此,我们只来谈谈最常用的部分。
下载
CentOS1
$ yum install screen
Ubuntu1
$ apt install screen
MacOS1
$ brew install screen
创建窗口
输入命令 screen
既可以创建新窗口1
2$ screen
$ screen -ls
1 | There is a screen on: |
进入窗口后,界面就像重新打开一次终端,初次外并无区别,随后执行 screen -ls
列出当前存在的窗口,会发现 <pid>.<session-name> <status>
样式的列表,Attached
代表该窗口处于连接状态。
断开
输入如下命令或键入 C-a d (ctrl-a d)
即可断开当前窗口1
$ screen -d
1 | [detached from 67784.ttys036.wxnacydeMacBook-Pro] |
出现如上字样,即从窗口断开,此时键入 screen -ls
会发现窗口状态变为 Detached
重连
1 | $ screen -r 67784 |
使用 -r
命令即可重连窗口,后面可以跟 pid
或 screen-name
,第二种方式好像名字太长了,下面我们介绍创建指定名字的窗口
创建指定名字窗口
1 | $ screen -S wxnacy |
使用 -S
参数既可创建指定名称的窗口,此时查看屏幕列表会发现如下列表1
2
3
4There is a screen on:
67784.ttys036.wxnacydeMacBook-Pro (Detached)
76023.wxnacy (Attached)
1 Socket in /tmp/uscreens/S-wxnacy.
由此可见我们应该更多的使用这种方式创建窗口
强制断开
如果在服务器与其他人共享一个账号,其他人也可以链接你创建的 screen 如果他忘记退出,或者你是非正常退出的终端,下次链接就会失败1
2
3There is a screen on:
17814.wxnacy (Attached)
There is no screen to be resumed matching 17814.
显示该正在连接,不能在连接,这时候如果不考虑其他情况,可以强行将屏幕断开链接1
$ screen -d wxnacy
这样其他人会自动断开连接。
相同名字带来的麻烦
-S
很方便,用不好也很麻烦,因为如果我忘了之前生成功一个 wxnacy 名字的屏幕,再次执行该命令,会再次生成一个相同名字的屏幕,但是 pid 会不同1
2
3
4There is a screen on:
67784.wxnacy (Attached)
76023.wxnacy (Attached)
1 Socket in /tmp/uscreens/S-wxnacy.
下次重连使用 screen -r wxnacy
就会报错1
2
3
4There are several suitable screens on:
67784.wxnacy (Attached)
76023.wxnacy (Attached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.
程序提示使用 67784.wxnacy
的方式进入或断开连接,我们先断开,在连接,成功了。
但这样太麻烦了,还是换成不同的名字比较好,需要删除一个屏幕,这时候分两种情况,连接状态和断开状态。
首先如何判断现在是否处于屏幕连接中,前面提到,外观上两者区别不大,此时可以使用组合键 C-a w
,如果处于连接状态,左下角会显示,所有窗口列表。
连接中1
$ exit [screen -X quit]
1 | [screen is terminating] |
非常简单,使用 exit
就可以删除当前屏幕,第二种可以,但是何必多输入这么命令呢
断开连接1
$ screen -r [-S] 67784.wxnacy -X quit
说白了,就是先连接,在执行 -X quit
删除,是的,连接命令后可以直接跟上想要在屏幕中执行的命令,但是 exit
在这时候无效。
了解了这些东西就可以使用它工作了,如果你有更高的需求可以参看这篇文章