SSH 连接至远程主机上并执行需要漫长等待的任务时, 如果网络突然终止了, 那么 SSH 会话会结束, 该任务也会被中断, 使用 screen 命令可以解决这个问题
screen 简介
screen 命令可以新建 screen 会话, 在这个会话中执行终端任务, 即使网络断开, 该任务还会在后台继续运行
安装 screen 工具
$ sudo apt install screen
安装完成后可查看版本
$ screen -version
Screen version 4.06.02 (GNU) 23-Oct-17
screen 会话
- 新建 screen 会话
$ screen
可以指定 screen 会话的名称
$ screen -S NAME
- 分离 screen 会话
进入 screen 会话后, 执行耗时操作, 通过 Ctrl + A, Ctrl + D
的组合键离开 screen 会话, 回到 ssh 会话, 这样即便 ssh 断开, screen 会话仍在后台运行
# 新建 sleep 的 screen 会话
$ screen -S sleep
# 进入 screen 会话, 运行 sleep 命令睡眠 5 分钟, 按下 Ctrl + A, Ctrl + D 分离会话
$ sleep 300
[detached from 157.sleep]
- 查看 screen 会话
$ screen -ls
There is a screen on:
157.sleep (07/20/22 10:48:19) (Detached)
1 Socket in /run/screen/S-root.
screen 会话的进程号为 157
# 通过 ps 查看并过滤, screen 会话的进程确实为 157
$ ps -ef | grep sleep
root 157 11 0 10:48 ? 00:00:00 SCREEN -S sleep
root 165 158 0 10:49 pts/1 00:00:00 sleep 300
root 169 12 0 10:51 pts/0 00:00:00 grep --color=auto sleep
- 回到 screen 会话
可以通过进程号或者 screen 会话的名称返回 screen 会话
$ screen -r 157
# 或者
$ screen -r sleep
- 结束 screen 会话
回到 screen 会话后, Ctrl + C
中断正在运行的任务, 然后和退出普通终端一样, 通过 Ctrl + D
或 exit
推出 screen 会话
screen 分屏
进入 screen 会话后, 默认只有一个分屏和这个分屏上的 shell 窗口
快捷键:
Ctrl + A, |
左右分屏, 实际按键顺序为Ctrl + A, Shift + \
Ctrl + A, S
上下分屏, 实际按键顺序为Ctrl + A, Shift + S
Ctrl + A, Tab
切换分屏Ctrl + A, c
在该分屏之上新建窗口Ctrl + A, X
销毁当前分屏
新建 screen 分屏的步骤为:
- 左右分屏或上下分屏, 分屏只是分割了屏幕
- 切换至指定分屏
- 在该分屏上新建 shell 窗口
当所有的 shell 窗口均退出时, screen 会话才会关闭