Linux中的screen命令是一个终端复用工具,允许用户在一个终端窗口中同时运行多个终端会话,并在这些会话之间自由切换。它的主要作用是为用户提供一个“会话管理器”,可以在一个终端窗口中创建多个虚拟终端,并在这些虚拟终端之间进行切换。
screen命令的主要特点包括:
-
会话管理:screen允许用户创建多个会话,每个会话都可以包含多个窗口,用户可以在这些窗口之间自由切换。
-
终端复用:用户可以在一个终端窗口中运行多个命令行程序,而不需要打开多个终端窗口。这提高了终端的利用效率,使用户能够更加高效地管理多个任务。
-
会话分离与附加:screen支持会话的分离和附加功能。即使终端会话与用户终端分离,其中的程序仍会继续运行。用户可以在其他终端或会话中重新连接到该会话,继续之前的工作。
-
窗口管理:screen提供了丰富的窗口管理功能,包括创建新窗口、列出当前所有会话和窗口、退出当前窗口等。
-
快捷键支持:screen支持多种快捷键操作,使用户能够更加方便地管理会话和窗口。
screen命令的每个虚拟终端都具备DECVT100终端和ANSI X3的控制功能,以及ISO 6429和ISO 2022标准(如插入/删除行和支持多个字符集)。每个虚拟终端都有一个回滚历史缓冲区和一个复制粘贴机制,允许用户在窗口之间移动文本区域。
在服务器上搭建服务时,screen命令尤为有用。某些服务在开启时需要占据整个控制台,如果关闭控制台就会导致进程终止。而使用screen命令,可以在服务器上开启多个控制面板(screen),用以容纳不同的任务,即使关闭了控制台,这些任务仍会继续运行。
screen 创建、查找、删除
apt-get install screen
# 创建screen
screen -d -m -S test_adb_shell
screen -ls test_adb_shell
# 查看会话列表
screen -ls 或 screen -list
# Attached:表示当前screen正在作为主终端使用,为活跃状态。
# Detached:表示当前screen正在后台使用,为非激发状态
# 重新连接会话,可以通过screen -ls获取id
screen -r <id>
# 如果不能恢复,则先screen -d后再走
# 从 screen 的会话列表中移除已死的(即不再存在的)会话
screen -wipe
# 注意: 这个命令并不会终止任何正在运行的 screen 会话,它只会清理会话列表中的已死条目。如果你想要终止一个正在运行的 screen 会话,你需要先使用 screen -r <session_id> 或其他方法附加到该会话,然后在该会话内部使用 exit 命令或按 Ctrl-A 然后 : 进入命令模式,并输入 quit 来退出会话
# 删除screen
screen -d -m -S test_adb_shell
screen -S <id> -X quit
screen: 启动一个新的 screen 会话。
Ctrl+A, D: 分离当前的 screen 会话。
screen -r: 重新连接到之前分离的 screen 会话。
Ctrl+A, C: 重新创建之前分离的 screen 会话。
screen -ls: 列出所有正在运行的 screen 会话。
screen -r session-name: 重新连接到名为 session-name 的 screen 会话。
screen -X: 在 screen 会话中启用扩展功能,例如鼠标支持、颜色设置等
示例
class CreateScreen:
def __init__(self, screen_name:str):
self.screen_name = screen_name
def do(self):
screen_command = "screen -d -m -S {0}".format(self.screen_name)
if RemoveScreen(screen_name=self.screen_name).ok:
self.logger.info("remove screen!")
class RunScreen:
pass
class RemoveScreen:
pass
class SipeScreen:
pass