以前使用ssh连接远程Linux服务器时,我通常使用nohup xxx.py &
命令在后台运行一些python脚本命令。当想查看输出日志的时候,我只好通过打开重定向文件来看log内容。有时候运行的后台命令比较多或者ssh暂时关掉了,还得查看下之前挂上的后台进程是啥,有点麻烦。同学推荐试试screen命令,进行会话窗口管理,可以方便地执行后台命令,无需担心突然断网导致命令中断。
创建screen会话
如果你所使用的linux发行版没有screen命令的话,可以自行安装一下。screen命令的使用方法很简单:
noahfeng@ubuntu:~$ screen
直接输入screen
命令后便建立了一个screen会话并创建一个shell窗口,之后我们在该shell窗口中正常使用执行命令即可。若使用Ctrl + a + d
快捷键退出该screen会话,所执行的命令依旧会在后台执行。
或者使用:
noahfeng@ubuntu:~$ screen -S name
给即将创建的screen会话设置一个便于区分的名字。
查看/重连screen会话
当我们退出某一screen会话之后,还想再重新连接进去,可以使用如下命令查看所有已开启的screen会话。
noahfeng@ubuntu:~$ screen -ls
该命令会输出所有screen会话,有如下形式输出:
There are screens on:
4102.pts-12.ubuntu (Detached)
5731.pts-20.ubuntu (Detached)
(直接使用screen
创建会如上面所示,若使用screen -S name
创建,会显示为4102.name
)
假如我们想连接到id为4102的screen,可通过下面命令:
noahfeng@ubuntu:~$ screen -r 4102 # 可以仅输入screen编号,也可以再按tab键补全screen会话全称。
注意: 有时使用screen -r xxx
命令连接某一screen会话时,会提示There is no screen to be resumed matching xxx
。此时可能是由于断网使得与screen断开,这时xxx
窗口应该显示为Attached
。我们只需要先将该会话由Attached
转为Detached
状态即可重连,使用如下命令:
noahfeng@ubuntu:~$ screen -d xxx
退出screen会话
如果不想使用某一screen会话了,在该screen会话窗口下使用如下命令退出:
noahfeng@ubuntu:~$ exit
若干快捷键
首先说明一下,由screen
命令创建的会话窗口(一下简称会话)下可以创建多个shell窗口(以下简称窗口)。
快捷键都是以Ctrl + a
作为起始键,再附加具体操作。
快捷键 | 说明 |
---|---|
Ctrl + a d | 暂时离开当前会话 |
Ctrl + a w | 显示所有窗口 |
Ctrl + a c | 创建一个新窗口并切换到该窗口 |
Ctrl + a n/p | 切换到下一个/上一个窗口 |
Ctrl + a 0…9 | 切换到第0…或第9个窗口 |
Ctrl + a a | 在最近使用的两个窗口间切换 |
Ctrl + a k | 关闭当前窗口。(会提示是否确认关闭) |
Ctrl + a A | 重命名窗口(这里的A是shift + a) |
Ctrl + a Esc/[ | 进入copy模式。可以上下翻页查看之前打印输出的日志,按Esc退出copy模式。 |
使用Ctrl + a w
快捷键之后,会在左下角显示如:
0$ bash 1-$ bash 2*$ bash
上面是在1个会话中打开了3个窗口,带有-
的表示上一次切换时位于窗口1,带有*
的表示当前所在窗口。