ubuntu 使用 screen 命令

SSH 连接至远程主机上并执行需要漫长等待的任务时, 如果网络突然终止了, 那么 SSH 会话会结束, 该任务也会被中断, 使用 screen 命令可以解决这个问题

screen 简介

screen 命令可以新建 screen 会话, 在这个会话中执行终端任务, 即使网络断开, 该任务还会在后台继续运行

安装 screen 工具

$ sudo apt install screen

安装完成后可查看版本

$ screen -version
Screen version 4.06.02 (GNU) 23-Oct-17

screen 会话
  1. 新建 screen 会话
$ screen

可以指定 screen 会话的名称

$ screen -S NAME
  1. 分离 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]
  1. 查看 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

  1. 回到 screen 会话

可以通过进程号或者 screen 会话的名称返回 screen 会话

$ screen -r 157

# 或者
$ screen -r sleep
  1. 结束 screen 会话

回到 screen 会话后, Ctrl + C 中断正在运行的任务, 然后和退出普通终端一样, 通过 Ctrl + Dexit 推出 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 分屏的步骤为:

  1. 左右分屏或上下分屏, 分屏只是分割了屏幕
  2. 切换至指定分屏
  3. 在该分屏上新建 shell 窗口

当所有的 shell 窗口均退出时, screen 会话才会关闭