问题描述:远程登录服务器之后,执行一个程序需要很长的时间,但ssh时常断开,或者不能保持本地和服务器一直联络,因此程序不能完整执行。

可以用screen命令将运行的程序放在后台,即使本地和服务器断联,该程序仍然会在服务器上执行。

安装screen

 
		# CentOS
                yum install screen
                # Debian/Ubuntu
                apt install screen 
                

screen常用命令集

 
                screen -v      #检查版本号
                screen -help   #打开帮助文档
                screen -ls     #查看已经存在的screen终端
                screen -S backup #新建一个名叫backup的虚拟终端,不会检录之前创建的screen,可能会创建一个同名的screen
                screen -R backup #恢复一个叫backup的虚拟终端,如果没有就新建一个backup的虚拟终端
                #在出现的虚拟终端中执行自己的程序,比如:
                bash backup.sh
                #然后,按Ctril+a,再按d,即可保持这个screen到后台并回到主终端
                screen -r [pid/name] #恢复对应名字的screen
                #如果不再需要这个虚拟终端,可以在此虚拟终端中用 exit 退出,就会回到主终端。
                screen -R [pid/Name] -X quit  #screen运行程序确定已经停止运行了,也可以在主终端内,使用此命令释放
                

screen创建的虚拟终端有两个工作模式:Attached (表示当前screen正在为主终端使用,为活跃状态) 和 Detached(表示当前screen正在后台使用,为非激发状态),通常情况下,不需要关注上面的状态。

无法进入Attached状态虚拟终端,比如,并没有Ctril+a再按d退出并挂起虚拟终端,反而因为长时间没操作,或者本地网络掉包等问题,非正常退出虚拟终端,导致出现SSH连接服务器,并没有在虚拟终端内, 却出现Attached状态。使用screen -r name 无法进入,而使用screen -R name 会创建新的虚拟终端。使用下面的命令:

 
                screen -d name      #把这个name的screen设置成Detach状态.
		screen -r name	    #再回复进入这个screen
                

参考:


https://zhuanlan.zhihu.com/p/405968623
[]