在写这篇文章的时候,我意识到我可能在总结一些过时的东西。

Screen 可以多开窗口并灵活切换,然而这一点它不如 Tmux 灵活和可扩展。因为每个窗口之间进程互不影响,它也可以起到在后台运行程序的作用,然后这一点它又不如 nohup 来的方便。比上不足比下有余,然而及时是过时,但是没有被淘汰,那就有总结的必要,也正因为此,我们只来谈谈最常用的部分。

下载

CentOS

1
$ yum install screen

Ubuntu

1
$ apt install screen

MacOS

1
$ brew install screen

创建窗口

输入命令 screen 既可以创建新窗口

1
2
$ screen
$ screen -ls

1
2
3
There is a screen on:
67784.ttys036.wxnacydeMacBook-Pro (Attached)
1 Socket in /tmp/uscreens/S-wxnacy.

进入窗口后,界面就像重新打开一次终端,初次外并无区别,随后执行 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
2
$ screen -r 67784
$ screen -r ttys036.wxnacydeMacBook-Pro

使用 -r 命令即可重连窗口,后面可以跟 pidscreen-name,第二种方式好像名字太长了,下面我们介绍创建指定名字的窗口

创建指定名字窗口

1
$ screen -S wxnacy

使用 -S 参数既可创建指定名称的窗口,此时查看屏幕列表会发现如下列表

1
2
3
4
There is a screen on:
67784.ttys036.wxnacydeMacBook-Pro (Detached)
76023.wxnacy (Attached)
1 Socket in /tmp/uscreens/S-wxnacy.

由此可见我们应该更多的使用这种方式创建窗口

强制断开

如果在服务器与其他人共享一个账号,其他人也可以链接你创建的 screen 如果他忘记退出,或者你是非正常退出的终端,下次链接就会失败

1
2
3
There 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
4
There is a screen on:
67784.wxnacy (Attached)
76023.wxnacy (Attached)
1 Socket in /tmp/uscreens/S-wxnacy.

下次重连使用 screen -r wxnacy 就会报错

1
2
3
4
There 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 在这时候无效。

了解了这些东西就可以使用它工作了,如果你有更高的需求可以参看这篇文章

03-16 18:53