Linux screen 常用语法总结:让程序在服务器后台持续运行
一、screen 是什么?
在使用云服务器或远程 Linux 服务器时,我们经常会通过 SSH 连接服务器运行程序。例如训练深度学习模型、下载数据、执行长时间脚本等。
但是如果 SSH 连接断开,普通终端中正在运行的程序也可能会被中断。为了解决这个问题,可以使用 screen。
screen 是 Linux 中常用的终端复用工具。它可以创建一个独立的终端会话,即使 SSH 断开,程序仍然会在服务器后台继续运行。之后重新登录服务器后,可以重新进入原来的 screen 会话继续查看输出。
简单来说:
screen 可以让程序脱离当前 SSH 连接,在服务器后台持续运行。
二、安装 screen
有些服务器默认已经安装了 screen,可以先检查:
screen --version
如果没有安装,可以使用以下命令安装。
Ubuntu / Debian:
sudo apt update
sudo apt install screen
CentOS:
sudo yum install screen
三、创建一个新的 screen 会话
最常用的方式是创建一个带名字的 screen 会话:
screen -S session_name
例如:
screen -S train
这样就创建了一个名为 train 的 screen 会话。
进入该会话后,就可以像普通终端一样运行程序:
python train.py
四、退出 screen 但不关闭程序
这是 screen 最重要的操作之一。
在 screen 会话中,如果想让程序继续在后台运行,并临时退出当前会话,需要按:
Ctrl + A,然后按 D
也就是:
- 先按
Ctrl + A - 松开后再按
D
此时终端通常会显示:
[detached from xxxx.train]
这表示已经成功离开 screen 会话,但里面的程序仍然在后台运行。
注意:
exit
会直接退出当前 screen 会话,如果里面没有其他程序,screen 会话也会结束。
所以,如果只是想让程序在后台继续跑,不要输入 exit,而是使用:
Ctrl + A + D
五、查看当前有哪些 screen 会话
可以使用:
screen -ls
示例输出:
There are screens on:
12345.train (Detached)
23456.test (Attached)
2 Sockets in /run/screen/S-user.
常见状态有两种:
| 状态 | 含义 |
|---|---|
Detached |
当前没有人进入该 screen,可以直接恢复 |
Attached |
当前该 screen 正在被某个终端占用 |
六、重新进入 screen 会话
如果 screen 状态是 Detached,可以使用:
screen -r session_name
例如:
screen -r train
也可以使用完整 ID:
screen -r 12345
七、强制进入已经 Attached 的 screen
有时候使用:
screen -ls
会看到某个 screen 是 Attached 状态。
这通常说明:
- 该 screen 正在被另一个终端使用;
- 或者之前 SSH 异常断开,screen 还以为原来的终端仍然连接着。
此时如果直接执行:
screen -r train
可能会报错。
可以使用以下命令强制接管:
screen -d -r train
含义是:
-d:先把原来连接的终端 detach 掉;-r:再重新进入该 screen。
如果还是不行,可以使用:
screen -D -r train
这个命令更强制一些,适合处理异常断开的情况。
八、创建并直接运行命令
有时可以创建 screen 会话并直接运行程序:
screen -S train python train.py
不过我个人更推荐先进入 screen:
screen -S train
然后再手动运行程序:
python train.py
这样更方便查看环境、路径和报错信息。
九、关闭 screen 会话
如果程序已经运行完,想关闭当前 screen,可以在 screen 内输入:
exit
如果当前 screen 中没有其他前台程序,执行后会退出并关闭该 screen 会话。
也可以按:
Ctrl + D
效果类似于退出当前 shell。
十、杀死指定 screen 会话
如果想直接关闭某个 screen,可以先查看会话:
screen -ls
然后使用:
screen -S session_name -X quit
例如:
screen -S train -X quit
如果有多个同名或需要指定 ID,可以使用:
screen -S 12345.train -X quit
十一、screen 中如何向上滚动查看日志?
在普通终端中,鼠标滚轮通常可以向上查看历史输出。但在 screen 中,有时候鼠标滚轮不能直接查看前面的日志。
这时可以进入 screen 的复制/滚动模式:
Ctrl + A,然后按 [
也就是:
- 按
Ctrl + A - 松开后按
[
进入滚动模式后,可以使用:
↑ / ↓
PageUp / PageDown
或者使用 Vim 风格按键:
k:向上
j:向下
退出滚动模式:
q
或者按:
Esc
十二、常用快捷键总结
| 快捷键 | 功能 |
|---|---|
Ctrl + A,然后 D |
暂时退出 screen,让程序后台运行 |
Ctrl + A,然后 [ |
进入滚动模式,查看历史输出 |
q 或 Esc |
退出滚动模式 |
Ctrl + A,然后 C |
在当前 screen 中创建新窗口 |
Ctrl + A,然后 N |
切换到下一个窗口 |
Ctrl + A,然后 P |
切换到上一个窗口 |
Ctrl + A,然后 " |
查看当前 screen 内的窗口列表 |
Ctrl + D |
退出当前 shell,可能关闭 screen |
十三、常用命令总结
| 命令 | 功能 |
|---|---|
screen -S name |
创建名为 name 的 screen 会话 |
screen -ls |
查看所有 screen 会话 |
screen -r name |
恢复进入指定 screen |
screen -d -r name |
强制断开原连接并进入 screen |
screen -D -r name |
更强制地接管 screen |
screen -S name -X quit |
关闭指定 screen |
screen --version |
查看 screen 版本 |
十四、一个实际使用示例
假设我要在服务器上训练一个深度学习模型,训练时间可能需要几个小时甚至更久。
1. 创建 screen
screen -S train_lstm
2. 进入项目目录
cd /data/THz_lossprediction
3. 激活环境
conda activate THz
4. 运行训练脚本
python train_lstm_seq2seq.py
5. 退出 screen,让程序后台运行
按:
Ctrl + A,然后按 D
此时即使关闭 SSH,程序也会继续在服务器上运行。
6. 下次重新连接服务器后查看 screen
screen -ls
7. 重新进入训练会话
screen -r train_lstm
如果显示该会话已经是 Attached 状态,可以使用:
screen -d -r train_lstm
十五、建议:重要任务最好保存日志
虽然 screen 可以查看终端输出,但如果输出太多,历史内容可能不方便查找。因此运行长时间任务时,最好把日志保存到文件中。
例如:
python train.py > train.log 2>&1
含义是:
>:把标准输出保存到文件;2>&1:把错误输出也保存到同一个文件;train.log:日志文件名。
如果想一边看输出,一边保存日志,可以使用:
python train.py 2>&1 | tee train.log
这样终端会显示输出,同时也会保存到 train.log 文件中。
之后可以使用:
tail -f train.log
实时查看日志。
十六、screen 和 nohup 的区别
除了 screen,很多人也会使用 nohup 后台运行程序。
例如:
nohup python train.py > train.log 2>&1 &
两者区别如下:
| 工具 | 特点 |
|---|---|
screen |
可以重新进入会话,适合交互式查看程序输出 |
nohup |
更适合简单后台运行命令,不方便重新进入交互界面 |
如果是训练模型、调试程序、需要反复查看输出,我更推荐使用 screen。
如果只是让一个简单脚本在后台运行,nohup 也可以。
十七、总结
screen 是远程服务器中非常实用的工具,尤其适合运行长时间任务,例如模型训练、数据处理、下载文件等。
最常用的几个命令其实并不多:
screen -S name
screen -ls
screen -r name
screen -d -r name
screen -S name -X quit
最重要的快捷键是:
Ctrl + A,然后 D
它可以让我们退出当前 screen,但不终止里面正在运行的程序。
对于经常使用云服务器或远程 Linux 环境的人来说,熟练掌握 screen 可以有效避免 SSH 断开导致程序中断的问题,也能让长时间任务管理更加方便。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)