最近在linux服务器上跑代码,为了防止因为ssh连接断开导致程序中断,了解了screen和jupyter lab。下面是学习screen的一些记录。
安装
sudo apt install screen
基本操作
- 创建名为s1的screen,你可以把s1换成任何你想要的名字。
screen -S s1
- 列出所有的screen,显示的格式为<pid>.sockname,pid是系统分配的数字,sockname就是用户起的名字,比如前面我起的
s1
。
screen -ls
- 与当前的screen分离(detach)
screen -d
- 重新连接screen
screen -r s1
- 退出当前的screen
exit
- 连接到未分离的screen,可以用于多用户同步显示
screen -x s1
快捷键
所有的快捷键都要先按Ctrl+a,再按对应的按键。
连接screen后可以使用快捷键。
下面Ctrl+a都简写为^A
,^
就是指按下Ctrl再加上一个别的按键。
^A ?
,即先按下Ctrl+a,松开后再输入?
,注意是英文状态。查看所有的快捷键信息。^A c
或^A ^C
,在当前screen下新建窗口(window)。^A ^N
,^A n
,^A sp
, (sp即空格键,n是next的意思),切换当前screen内的下一个窗口。^A ^H
,^A ^P
,^A p
, (p是previous的意思),切换当前screen内的前一个窗口。^A ^D
,^A d
, 使当前的screen分离(detached),回到原来的终端,对应前面的screen -d
。^A ^W
,^A w
, 列出当前screen下所有的windows,每个window都是序号+名字。^A N
, 显示当前window的序号。^A 数字键
, 显示对应序号的window。^A ^X
,^A x
, 锁定screen,要用用户密码解锁。^A k
,^A K
, 即kill,关闭当前的window,当window全部关闭后,当前screen退出,效果和在window里输入exit
一样。^A \
, 关闭当前screen和所有的window。
实际体验时遇到的一些情况
- 开启多个screen后不知道自己当前是哪个screen,建议只开一个screen,然后开多个window。
- 可以创建重名(sockname相同)的screen,此时无法用sockname连接,系统会提示你有多个可选择的对象,只能用
screen -r <pid>
即对应的pid号来连接(不要输入中括号)。 - 使用
screen -S s1
,创建名为s1的screen后,再用s1的pid作为名字(sockname)创建新的screen,即此时s1的pid和第二个screen的sockname相同。例如有两个screen:12345.s1和56789.12345,那使用screen -r 12345
会打开哪个screen呢?经过测试,系统会和前面一样,提醒你有多个可选择的对象,你可以选择screen -r s1
或screen -r 56789
来避免冲突,也可以采用完整的screen -r <pid>.sockname
来打开想要的screen。