screen可让任务脱离终端持续运行,需用-s指定会话名(如screen -s backup),按ctrl+a+d分离,screen -ls查看后用screen -r恢复,任务结束在会话内exit退出。

screen 能帮你把任务从终端“解绑”,网络断了、关了窗口,任务照样跑。关键不是开多个窗口,而是让每个耗时任务独占一个会话,并能随时回来查看或操作。
创建带名字的会话,避免混淆
别直接敲 screen,容易后续分不清。用 -S 指定名称,比如:
- screen -S backup —— 启动一个叫 backup 的会话,适合跑 rsync 或 tar 备份
- screen -S train —— 专门跑机器学习训练脚本
- screen -S deploy —— 执行上线部署流程
名字越具体,后面查起来越省事。screen 会自动分配 ID(如 12345.backup),但你记名字就行。
安全分离,不中断任务
想暂时离开?别直接关终端或 Ctrl+C。在 screen 会话里按:
- Ctrl + a(松开),再按 d
- 看到 [detached] 就成功了——程序还在后台跑,SSH 断连也不影响
注意:这个操作必须在 screen 会话内部执行;如果只是在普通 shell 里按 Ctrl+a d,是没反应的。
随时找回正在运行的任务
重新登录后,先看有哪些会话活着:
- screen -ls —— 列出所有会话,状态为 Detached 的才是可恢复的
- 如果只看到一个 Detached 会话,直接 screen -r 就能连回去
- 如果有多个,比如显示 12345.backup 和 67890.train,就用 screen -r backup 或 screen -r 12345.backup
如果提示 “There is no screen to be resumed”,说明目标会话可能已结束,或者根本没 detach 就退出了——这时要检查 screen -ls 输出有没有 Dead 条目,必要时运行 screen -wipe 清理残留。
干净收尾,释放资源
任务完成,别留着空会话占系统资源:
- 先进入目标会话(screen -r xxx)
- 在会话内输入 exit,或按 Ctrl + d
- 会话终止后,screen -ls 就不会再显示它了
不推荐用 kill 强杀,容易导致子进程变成僵尸或残留临时文件。











