Screen(一)_简介与安装
一、什么是screen命令
screen 是 Linux/Unix 系统中一个非常强大的终端多路复用器(Terminal Multiplexer)。它允许用户在一个单一的物理终端窗口中运行和管理多个会话(类似于虚拟终端),并且这些会话可以在后台保持运行,即使用户断开连接也不会终止正在运行的进程。
二、主要功能
1.后台运行任务
screen 会话中的进程可以独立于用户的当前终端会话运行,即使用户关闭终端或断开 SSH 连接,任务也会继续运行。
2.会话恢复
用户可以在断开连接后重新连接到先前的 screen 会话,恢复其状态。
3.多窗口支持
在一个 screen 会话中,用户可以创建多个虚拟终端(窗口),每个窗口可以独立运行不同的命令或任务。
4.共享会话
多个用户可以同时连接到同一个 screen 会话,用于协作调试或共享任务。
5.滚动查看历史输出
screen 提供了内置的滚动缓冲区功能,可以方便地查看之前的输出内容。
三、实现原理
screen 命令的原理基于终端多路复用技术和伪终端(pseudo-terminal,简称 PTY)的使用。下面从几个核心概念来解释它的实现原理:
1. 伪终端 (PTY)
-
什么是伪终端?
在 Unix/Linux 系统中,伪终端是一种虚拟终端,它由两部分组成:主设备(master) 和 从设备(slave)。应用程序与主设备通信,主设备将数据转发给从设备,从设备则模拟一个真实的终端。
-
在
screen
中的作用:screen
会为每个会话创建一个伪终端。它拦截用户输入(通过主设备),将其发送到对应的伪终端,并捕获从设备返回的输出,再将其显示到用户的终端。这样,
screen
可以管理多个伪终端,实现多个虚拟会话。
2. 会话管理
- 当用户运行
screen
时,它会创建一个主进程作为会话管理器,并启动子进程来运行用户的 Shell(例如 bash、zsh 等)。 - 每个
screen
窗口实际上对应一个独立的 Shell 子进程。screen
的主进程负责:- 跟踪每个窗口的状态。
- 管理窗口之间的切换。
- 保存窗口的历史输出。
- 在会话分离(detach)后保持子进程的运行。
当用户分离会话时,screen
会保持这些子进程运行,直到用户重新连接。
3. 输入输出重定向
screen
通过重定向标准输入(stdin)、标准输出(stdout)和标准错误(stderr)来实现与伪终端的通信:
- 用户的输入被捕获后,
screen
将其发送到对应的伪终端。 - 程序的输出被伪终端捕获后,
screen
将其返回并显示到用户的真实终端。
这种输入输出重定向使得用户可以自由切换、分离、重新连接会话,而不会中断正在运行的程序。
4. 后台运行
- 当用户分离会话时,
screen
的主进程不会退出,而是继续运行:- 它维持伪终端和子进程的状态。
- 保存窗口的内容。
- 等待用户重新连接。
- 即使用户关闭终端或者网络连接断开,
screen
进程仍会驻留在系统中,确保任务不中断。
通过这种方式,screen
实现了后台运行的效果。
5. 多路复用
-
多窗口机制:
screen
的主进程可以管理多个伪终端(窗口),每个伪终端运行一个独立的 Shell 或程序。 -
窗口切换:
通过快捷键,
screen
的主进程会将用户的终端绑定到不同的伪终端,实现窗口间的快速切换。
6. 滚动缓冲区
screen
为每个窗口分配了一个缓冲区,用于存储历史输出数据。- 当用户进入滚动模式时,
screen
会暂停实时输出,并允许用户浏览缓冲区中的历史内容。
7. 会话恢复
- 每个
screen
会话都有一个唯一的标识符(ID)或名称。 - 分离会话后,
screen
的主进程会保存伪终端的状态。 - 当用户重新连接会话时,
screen
会将用户的终端重新绑定到保存的伪终端,恢复之前的运行状态。
四、安装
大多数 Linux 系统默认包含 screen,如果没有安装,可以用以下命令安装:
-
Debian/Ubuntu:
sudo apt install screen
-
CentOS/RHEL:
sudo yum install screen
-
Arch Linux:
sudo pacman -S scre