当前位置: 首页 > article >正文

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
    


http://www.kler.cn/a/448800.html

相关文章:

  • Unity中有什么情况下是需要用UniTask替代其他异步方式的吗?
  • 《解锁 Python 数据挖掘的奥秘》
  • 如何学习Trustzone
  • 电商项目-网站首页高可用(二)
  • 人工智能在VR展览中扮演什么角色?
  • 跨站脚本攻击的多种方式——以XSS-Labs为例二十关详解解题思路
  • 达梦官方工具 SQLark数据迁移(oracle->达梦数据库)
  • PHP MySQL 插入多条数据
  • electron-vite【实战】登录/注册页
  • 实践:从一次故障聊聊前端 UI 自动化测试
  • ROS2 python编写 intel realsense D405相机节点通过launch.py启动多个相机并发送图像话题,基于pyrealsense2库
  • 网络编程 03:端口的定义、分类,端口映射,通过 Java 实现了 IP 和端口的信息获取
  • jvm字节码中方法的结构
  • 在Excel中如果制作可以自动填充的序号,删除或者合并单元也可用
  • 游戏世界是什么
  • MySQL专题:日志及MVCC
  • CSS系列(22)-- 容器查询详解
  • 【译】仅有 Text2SQL 是不够的: 用 TAG 统一人工智能和数据库
  • 前端算法小白日刷三题17
  • 最全解决方案:org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.
  • 基于微信平台的文玩销售小程序ssm+论文源码调试讲解
  • Restaurants WebAPI(四)——Identity
  • 241221面经
  • powershell使用积累
  • 一起学Git【第一节:Git的安装】
  • Llama 3 模型系列解析(一)