序
使用远端服务器的时候,一般都是跑需要运行数小时甚至数天的大程序,在这种情况下,如果我们将连接服务器的PC关闭,那么远端服务器的进程也会中断。
这时候就希望当我们在PC启动远端服务器的进程后,即便关闭PC,远端服务器的程序仍可正常运行,当我们第二天早上起来后打开PC,期望看到远端服务器运行的结果。这方面,使用 screen 可以实现。
安装screen
因为本人无sudo权限,因此网上一部分使用管理权限的连接方法就直接pass了,这里列出友人wx的一个方法。
- 打开远端服务器的命令窗口
- pip install screen
- 完成
但是我个人在第二步之前,先activate了我主要使用的Anaconda环境,之后出现了下述问题:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 6: ordinal not in range(128)
询问度娘后, 发现这个问题一般来讲是出现在python2上面的,但是我实际用的是python3。网上的一般solution为修改报错的文件,加上下面语句:
if sys.getdefaultencoding() != 'utf-8':
reload(sys)
sys.setdefaultencoding('utf-8')
对我来说,报错信息里的两个文件一个是/tmp/pip##,然而在根目录下的tmp里根本就没有这个。
直接说结论,‘ascii’的报错信息我并没有解决,而是在Anaconda的base环境中成功 pip 了 screen,之后即便进去其他Anaconda的环境,也能成功使用screen了。
screen使用方法
下面内容主要参考这篇博文,博主另有整理和补充
screen是一个可以在多个进程(通常是交互式shell)之间复用一个物理终端的全屏幕窗口管理器。即linux下使用多窗口
常用screen命令
# 列出当前所有的session
screen -ls(或者screen -list)
# 新建一个叫session_name的session,并直接进入
screen -S session_name
# pc与session_name断开连接,但其仍正常运行)
# 需要在一个新的lls会话窗口执行
screen -d session_name
# pc与session_name建立连接
screen -r session_name
# 彻底关闭session_name
screen -X -S session_name quit
# 结束当前session并回到session_name这个session
screen -d -r session_name
退出当前screen窗口,结束当前screen窗口,不想再连接回来(即杀死会话)
exit