screen 是一个强大的终端多路复用器, 允许你在一个终端窗口内运行多个独立的会话。它的主要功能包括会话管理、后台运行、断开连接后恢复会话等, 非常适合远程服务器管理和长时间运行的任务。
基本功能
1、会话管理
- screen 可以在一个终端中创建多个虚拟终端, 每个终端运行独立的进程。
- 会话可以分离(detach)和重新连接(reattach), 即使你关闭了当前的终端窗口或断开了 SSH 连接, 也能恢复原有的工作环境。
2、后台运行
- 使用 screen 启动的程序可以在后台运行, 即使用户退出会话, 程序仍然继续运行。
3、会话共享
- 多个用户可以通过共享一个 screen 会话进行协作, 每个用户都可以看到和操作同一个会话。
通常情况下, screen 创建的终端环境有两种工作模式
- Attached: 表示当前 screen 正在作为主终端使用, 为活跃状态
- Detached: 表示当前 screen 正在后台使用, 为非激活状态
常用命令
安装 screen
# centos
yum install -y screen
# ubuntu
apt install -y screen
查看已有虚拟终端
:~$ screen -ls
There is a screen on:
3627.pts-0.kind (2024年07月31日 09时36分10秒) (Detached)
1 Socket in /run/screen/S-root.
创建虚拟终端
# 启动一个新的会话
screen
# 指定会话名称
screen -R session_name # 推荐
# 或
screen -S session_name
- 使用
-R
创建, 如果已有一个同名的 screen, 则会直接进入之间创建的 screen - 使用
-S
创建, 如果已有一个同名的 screen, 则会在创建一个新的同名screen, 不会检索以前的
分离当前会话
Ctrl + a, d
重新连接已有的会话
# 查看会话名称或pid
:~$ screen -ls
There are screens on:
3733.hello (2024年07月31日 09时59分41秒) (Detached) # pid.name
2 Sockets in /run/screen/S-root.
# screen -r [pid/name]
:~$ screen -r hello # 或 screen -r 3733
结束会话
在会话内
# 使用 exit 命令
:~$ exit
在会话外
:~$ screen -r [pid/name] -X quit
会话终端输出写入日志文件
创建会话时写入日志文件
:~$ screen -L -Logfile /tmp/screen_hello.log -R hello
在已有会话内将后续终端输出写入日志文件
:~$ screen -X logfile /tmp/screen_hello.log
:~$ screen -X log
无法进入 Attached 状态的终端
在某些状态下, 非正常退出了虚拟终端, 而通过查看虚拟终端的状态还是 Attached, 这时通过 screen -r
是无法进入这个虚拟终端的。可以使用 screen -d
将终端状态置为 Detached。
# 查看终端状态
:~$ screen -ls
There is a screen on:
4287.hello (2024年07月31日 10时27分12秒) (Attached)
1 Socket in /run/screen/S-root.
# 无法进入虚拟终端
:~$ screen -r hello
There is a screen on:
4287.hello (2024年07月31日 10时27分12秒) (Attached)
There is no screen to be resumed matching hello.
# 重置终端状态
:~$ screen -d hello
[4287.hello detached.]
# 查看终端状态
:~$ screen -ls
There is a screen on:
4287.hello (2024年07月31日 10时27分13秒) (Detached)
1 Socket in /run/screen/S-root.
# 进入终端
:~$ screen -r hello