试想这样一个场景:某天你打开MobaXterm,然后进行深度学习训练,当训练进度到99%时,下一秒就能看到结果,突然啪的一声断电,你的进程因为断电强制结束。或者周六想出去放松一下,但是实验还得继续跑,只能电脑打开进程在那挂着,但是晚上Windows突然给你来个系统更新,系统又强制重启,over,血压上来了。那么此时就迎来了我们的神器Screen。
什么是Screen?
简单来说,使用Screen可以实现本地终端和远程终端的分离,在本地终端退出的情况下不影响远程终端的使用,也就是你在本地访问服务器跑程序之后本地主机关机也就没有影响了,可以实现随时切换,并且可以同时连接多个远程会话。
Screen是一个全屏窗口管理器,它可以在多个进程之间多路复用一个物理终端。Screen中有会话的概念,用户可以在一个会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的telent/SSH连接窗口那样。 通俗的讲,screen命令用于新建一个或多个“命令行窗口”,在新建的这些“窗口”中,可以执行命令,并且这些“窗口”都是独立并行的。
Screen常用命令
- 创建会话
最简单的方法就是直接输入screen
screen
但这种方法的劣势也很明显,当你的会话多了会无法分辨哪个进程id在干什么,切换麻烦,如下:
(base) user@gpu-SA5212M5:~$ screen -ls
There are screens on:
36727.pts-8.gpu-SA5212M5 (2021年11月23日 10时26分53秒) (Detached)
36701.pts-8.gpu-SA5212M5 (2021年11月23日 10时26分24秒) (Detached)
2 Sockets in /var/run/screen/S-user.
推荐使用方法:
screen -S $model_name
eg:
screen -S resnet
screen -S classification
- 显示当前所有会话
screen -ls
(base)user@gpu-SA5212M5:~$ screen -ls
There are screens on:
36752.resnet (2021年11月23日 10时32分32秒) (Detached)
36727.pts-8.gpu-SA5212M5 (2021年11月23日 10时26分53秒) (Detached)
36701.pts-8.gpu-SA5212M5 (2021年11月23日 10时26分24秒) (Detached)
3 Sockets in /var/run/screen/S-user.
如上所示,我们可以通过后面的名字得到具体的进程。此时就可以通过进程号和进程名字进行切换。
- 会话切换
如果想切换到resnet这个进程可以通过:
screen -r resnet
screen -r 36752
上面任意一个都可。
- 离开当前会话
如果你想离开当前会话(可能是关机,切换进程,回去玩耍等),也就是程序挂后台。
ctrl + a + d
此时可以在主会话上继续创建其他会话或者执行其他命令,对我们创建的会话没有任何影响。
- 退出会话
当程序完成不需要此会话后,可以直接输入exit来结束当前会话。
ok,以上就是常用的screen命令,用好之后必定事半功倍。