1 功能用途

一个视窗管理功能,可以在linux服务器挂起一个视窗进程,在我们windows、mobaxterm、pycharm等终端离开、断线的时候,服务器上的进程仍然会继续运行,待下次我们在终端重新连接上时可以看运行进度。

在深度学习模型训练中,我们经常要在服务器挂上好几个训练模型,一般都要训练几天才有结果,在普通终端模式下,遇到断网等情况,就需要重新加载模型训练了。
screen可以解决我们这个痛点。

2 基本使用方法

2.1 新建:screen -S

新建一个自定义名称的窗口(并进入),例如我的conda有个detec2环境,对应地建立了detec2.1的子窗口,专门用来跑detec2环境相关的项目:

  1. screen -S detec2.1

也可以不指定名称,系统会有默认的命名方式。

2.2 查看:screen -ls

查看已有的窗口:
image.png
每行是一个screen子窗口
第1列是窗口的完整名称,其中红框部分是pid,进程id,后面的蓝框是窗口名称
第2列是窗口创建时间
第3列,Detached表示离线,没有终端、应用接入这个窗口;Attached相反,表示有终端正在使用该窗口。

2.3 进入:screen -x

可以只写pid,也可以只写蓝框的名称部分,也可以写全称,可以用tab有自动补全功能。

-x和-r的区别:
-r只能接入Detached离线状态的screen,要接入Attached状态的,必须加-d参数先将其离线。
而-x是多终端共用一个screen,比如PC1已经接入screenA,PC2用-x也进入screenA,此时PC1和PC2能同时操作、显示screenA,就像我们使用腾讯文档等多人协作编辑的效果。

2.4 退出:Ctrl + a,d

使用快捷键退出,注意这里按法,先按住Ctrl键不要松开,然后敲击a松开后,再敲击d。

这里指的退出,是终端断开连接,让screen离线了,但是screen的程序还会继续运行,相当于挂载在后台。
下次上线可以用screen -x进入看运行进度。

2.5 删除:kill

因为这些screen每个都是一个pid进程,所以使用linux的kill命令可以直接删除,例如:kill 4464。

当然,其实有些窗口是可以常驻着的,比如我留着detec2.1,随时有需要用detectron2框架跑项目的时候,都可以进入这个窗口继续使用,不必每次跑完就马上kill掉。

2.6查看屏幕输出

screen显示窗口查看历史输出

3 参考资料

Linux screen命令 | 菜鸟教程