序
使用遠端服務器的時候,一般都是跑需要運行數小時甚至數天的大程序,在這種情況下,如果我們將連接服務器的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