Linux 必备的终端复用工具:screen
screen 是 Linux 服务器运维人员几乎都会用到的一个工具,这篇教程给出一些最常用的命令和使用实践
用人话说清你何时需要 screen
Linux 中有些命令执行完以后,给你返回一条“我搞定了”就没了(甚至不返回任何信息,比如 mkdir
)。
而有些执行以后会一直占着终端不放,还不时输出一些日志信息,但你无法与其交互。这种进程被称作守护进程(Daemon),例如 web 应用中的前后端进程。
还有些进程,一样占着终端不放,但是你可以与进程进行一些交互,就像 Minecraft
游戏服务器的 Java
进程一样,你可以往里面打命令去控制一些玩家和游戏的行为。这种进程被称作前台进程(Foreground Process)。
然而,在运行这些进程的时候,你也许需要去做些别的事情,毕竟一台机子不可能只跑它一个程序吧?比如一边运行着 web 项目,一边还要做些 git 操作,那不就需要一个新的终端了吗?
此时我们可以在执行上述进程时候加上 &
符号或者使用 nohup
参数来让它在后台乖乖运行,但一旦这种进程多了难免会出事。本文介绍的 screen
命令就是一个强大的工具,专门处理上述情境中的问题。
§1 必会操作
会话操作
创建新会话
创建一个名为 my_task
的会话:
1 | screen -S my_task |
会话内快捷键
当你已经进入了一个 screen ,你可以先按住 ctrl
+ A
,再按其他可选命令键来实现:
1 | Ctrl+a D # 暂时离开当前会话(detach) |
在会话中输入 quit
也可以强制杀死当前会话并退出。用 exit
则是正常退出。
会话管理:
查看都有哪些 screen 在运行:
1 | screen -ls |
重新连接会话:
1 | screen -r # 如果只有一个会话,直接连接 |
往会话里发命令:
就比如发一个强制退出命令,以此杀死 id 为 12345
的会话:
1 | screen -S 12345 -X quit |
- -S 参数指定要操作的会话
- -X 参数表示要向这个会话发送命令
quit
是发送的具体命令,用于终止会话
会话状态:
当你使用 screen -ls
时,可以查看到会话后面带着一个状态标识,比如:
1. Attached(已连接)状态
- 定义:代表你当前处在这个会话之中,处于交互模式。
- 切换到此状态:
screen -r <会话ID>
2. Detached(已分离)状态
- 定义:代表这个会话在后台正常运行。
- 切换到此状态:在
screen
会话中按下Ctrl + A
,然后按下d
,这会使得当前screen
会话从终端中分离出来。进程依然在后台运行,但不再直接与终端交互。 - 恢复会话:你可以使用
screen -r
命令恢复分离的screen
会话,继续与进程交互。
3. Multi-screen(多屏幕)状态
- 定义:一个
screen
会话可以包含多个虚拟终端(即多个"屏幕")。这使得你可以在同一个screen
会话中同时运行多个程序或会话。在不同屏幕之间切换时,每个屏幕的状态和程序都是独立的。 - 切换到此状态:在
screen
中使用Ctrl + A
然后按c
来创建新的屏幕,使用Ctrl + A
然后按n
或p
切换到下一个或上一个屏幕。你也可以通过Ctrl + A
然后按"
切换到屏幕列表。
4. Dead(死亡)状态
- 定义:如果一个
screen
会话中的进程因某种原因终止(如程序崩溃),该会话的状态会变成“死亡”。此时,screen
会话将无法再恢复,它已经完全关闭。 - 清理死会话:可以通过
screen -wipe
来清理已经死掉的会话
- 标题: Linux 必备的终端复用工具:screen
- 作者: 三葉Leaves
- 创建于 : 2024-12-19 00:00:00
- 更新于 : 2025-01-05 18:48:33
- 链接: https://kiss1314.top/b6648a27ab2d/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论