远程连接服务器最蛋疼的事,莫过于执行了很长时间的命令,因为ssh连接莫名的断开而停止,这种情况简直是灾难性的。
还好Linux提供了screen命令,来应对解决这种情况。
Screen被称之为一个全屏窗口管理器,用他可以轻松在一个物理终端上获得多个虚拟终端的效果。
简单来说,Screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器,这意味着你能够使用一个单一的终端窗口运行多终端的应用。Screen中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的telnet/SSH连接窗口那样。
使用方法如下:
首先运行screen,开启一个终端:
在要执行的命令前,加上screen命令,比如使用make进行编译时:
这个时候如果ssh终端断开了连接,命令也不会停止执行。
再次打开ssh连接时,通过以下命令查看正在后台运行的终端:
通过“screen -ls”得到包含进程pid的终端列表,可使用kill pid结束某个screen终端
登录某一个在后台运行的screen终端:
如果运行时提示“screen is terminating”,执行如下2条命令尝试解决:
screen有两种状态,Attached 和 Detached,分别表示前台运行和后台运行
当使用“screen -ls”查看终端列表时,会看到大部分是Detached,表示正在后台运行,个别Attached的状态,使用“screen -r 终端名称”会遇到无法恢复前台显示的情况
Attached表示有用户在登陆这个会话。 如当前没有用户登陆这个会话,会话状态会应显示为Detached。
如果要登陆的会话也显示Attached,可以通过增加 -D 参数强制踢掉前一用户,命令:
比如上面图片中gcc的session_id为4425,命令是:
恢复终端时提示“Attaching from inside of screen”,使用screen -d session-name,比如上面图片中:
注意:
1、用远程工具通过ssh连接时,比如终端已经在某个连接中打开,在另一个连接中使用kill session-id命令关闭此终端,那么已连接的窗口将自动退出;
2、在某个连接中开启一个screen终端,在linux服务器自身恢复此终端,然后再去任意ssh连接中通过screen -ls查看此终端状态,均为Attaching,可以在ssh连接中通过screen -D -r session-id恢复终端窗口,此时Linux服务器自身将退出终端,显示登录窗口;