常常需要在linux远程服务器上运行一些任务,这些任务并不是短时间内就可以完成的,一旦关闭终端(terminal)窗口或者断开链接,任务就会被杀死;或者我们想要同时运行多个任务,但又不想开多个终端窗口,怎么办?
这时候screen就派上用场了,它能实现任务和当前窗口的分离,即使你关掉了当前窗口,只要服务器还在运行,任务就依旧在后台运行;借助screen还能在当前窗口同时开始多个任务。
一般的linux系统都会自带screen,如果没有安装的话,使用如下命令进行安装
sudo apt-get install screen
或sudo yum install screen
我主要是为了让tensorboard服务、jupyter服务等长期在远程服务器上后台运行,才使用screen的。这涉及到一些基础的screen操作,如下所述,亲测可行。
1 查看有哪些会话窗口正在运行
# 在命令行输入如下命令
screen -ls
# 终端返回结果示例
There is a screen on:
28114.tensorboard (12/18/19 05:53:27) (Detached)
1 Socket in /var/run/screen/S-root.
这说明有一个会话窗口在后台运行,该会话的编号是28114(用户新建窗口后系统给的),名称是tensorboard(用户新建窗口时指定的)
2 新建窗口,并进入到这个窗口。(就相当于新开了一个terminal窗口,然后就可以执行任何你想要的命令行操作了)
# 在命令行输入如下命令(其中gbl_jupyter在我自己起的名字)
screen -S gbl_jupyter
3 退出会话窗口,但希望任务继续运行,请使用快捷键 ctrl-a-d
这其实就是执行了分离命令detach,在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)
4 重新恢复/进入一个窗口
screen -r 28114 # 28114是你想进入的会话窗口的编号
5 将窗口从atached状态转换为detached状态
screen -d 28114
6 关掉/杀死 某个窗口
screen -S 28114 -X quit
7 清除所有dead掉的窗口
窗口后面有(???dead)字样,说明窗口死了,但是仍在占用空间
screen -wipe
除了上述操作,screen还有一些好玩的功能,比如会话共享,也就是说你可以和其他人同时从不同的终端进行到同一个会话,这时候你们看到的界面是完全一样的,你可以看到他正在以多快的速度敲代码,他也可以看到你输入的命令行操作,亲测可行,嘻嘻嘻,很好玩的=-=