在使用ssh或者telnet登录远程主机后,执行一些耗时的命令,如果此时ssh或者telnet中断,那么远程主机上正在执行的程序或者说命令也会被迫终止。比如你远程登录之后需要执行一个耗时的指令如svn checkout,这时马上又要下班了,你要关闭你的电脑走人了,怎么办?screen能够很好地解决这个问题。screen也叫虚拟终端,可以在一个物理终端上实现多个虚拟终端的效果。
这里来说一下常规用法:
1、新建一个screen
直接screen或者screen -S XXX(XXX是你为这个screen指定的名字)
2、在screen中新建一个虚拟终端(此时你的screen中就有了两个虚拟终端了)
ctrl+a+c(先按ctrl+a,然后再按c,下面的命令也一样)
3、在虚拟终端之间切换
前一个ctrl+a+p
后一个ctrl+a+n
列表选择ctrl+a+shift+"
4、关闭一个虚拟终端
ctrl+a+k或者exit
5、挂起screen(挂起之后你又回到了创建screen的shell)
ctrl+a+d
6、重新连接screen
screen -ls列出当前挂起的screen
比如有这样一条“8888.XXX (Detached)”
那么可以使用screen -r 8888或者screen -r XXX来重新连接。
对于文章开头的问题,应该可以解决了,你连上远程主机后,先不要急于运行你的指令,而是先创建一个screen,然后在screen的虚拟终端里面运行你的指令,要断开连接之前先把screen挂起,下次连进来的时候你只需要重新连接你的screen,你会发现你的指令已经乖乖地执行完毕或者正在执行而不是被迫中断了。
一般以上的用法已经足够,如果需要更多,请直接screen --help。顺便说一下,一般发行版是不带这个软件的,你需要自行安装,Ubuntu下面就直接sudo apt-get install screen。