Linux命令系列(3) —— 单会话多shell命令:screen
一. 命令简介
在使用Linux的时候,有些情况下只能使用单个会话,但是又有多shell的需求;又有一种情况,需要执行一个在会话结束以后依旧需要执行的进程(在Linux系统中,用户通过shell登录后执行的进程都是挂载在当前shell下,作为用户shell的子进程,当用户的shell结束后,下挂的所有进程都会销毁),可以选择命令后缀 &
,这样可以将进程挂载到systemd(系统守护进程)下,但是并不灵活,对于一些需要依旧需要命令行交互的进程,挂载到系统守护进程后,就失去了进程的交互权。
此时就需要一个功能强大的工具—— screen,模拟shell连接。
二. 安装
绝大多数的Linux发行版都内置了screen工具,部分没有安装的可以直接使用对应系统的包管理工具搜索并安装 screen 工具。
三. 常用命令
1. 查看shell
- 查看screen版本
screen -v
- 查看所有创建的screen
此命令会打印所有创建的shell窗口,shell窗口会有两种状态:Attached(已连接/占用)和 Detached(离线/未占用)。screen -ls
2. 创建shell
- 直接创建
这样会创建一个用户名+随机字符作为名称的shell窗口,并直接进入。并不推荐这样使用。screen
- 自定义名称创建
这样可以指定创建出的shell窗口的名称,并直接进入。screen -S <name>
3. 离开shell
- 单shell离开(Attached -> Detached)
此命令会将连接的shell置为离线状态(如果有其他终端用户也共享连接方式进入此shell,也会被踢出)。screen -d
- 多shell离开(Attached -> Detached)
多shell的情况下,需要指定shell名称或者pid(进程号)来对指定的shell离线处理。screen -d <name/pid>
- 安全退出(Attached -> Attached/Detached)
使用[Ctrl] + [a] + [d],即可安全退出当前shell(不影响其他终端用户继续使用此shell)。当最后一个用户退出此shell,shell的状态变为Detached。
4. 进入shell
- 离线状态单shell进入(Detached -> Attached)
当只有一个shell,且状态为Detached时,直接使用screen -r [name/pid]
-r
命令即可进入shell。(也可以后缀名称或者进程号) - 离线状态多shell进入(Detached -> Attached)
当有多个shell的时候,就需要指定name或者进程号来进入状态为Detached的shell。screen -r <name/pid>
- 进入已占用状态的单shell(Attached -> Attached)
当shell变成Attached状态时,说明已经有用户进入了此shell,如果也想进入,需要使用screen -x
-x
命令。此shell就变为共享shell,所有进入的用户都可以即时的输入和看到输出。 - 进入已占用状态的多shell(Attached -> Attached)
多shell的情况下,进入Attached状态的shell,需要指定名称或者进程号。screen -r <name/pid> - x
5. 销毁shell
- shell内命令销毁
输入命令后,会销毁当前的shell,并将其他用户踢出。exit
- shell内快捷键销毁
使用[Ctrl] + [d],即可销毁当前shell。