背景

系统管理员经常需要SSH或者telent远程登录到linux服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份、ftp 传输等等。通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为它们执行的时间太长了。必须等待它们执行完毕,在此期间不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了。

简介

GNU Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。

GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。

我们可以使用screen命令,来让保证退出ssh之后程序继续在后台跑。

安装

首先可以先查看是否安装screen,通过命令

1
screen -ls

若出现

1
2
The program 'screen' is currently not installed. You can install it by typing:
sudo apt install screen

说明尚未安装,按照提示,通过命令,安装screen:

1
sudo apt install screen

使用方法

  • 新建窗口
    1)可直接通过命令screen新建一个窗口,并进入窗口。但通过这种方式新建的窗口没有名字,只有系统分配给它的一个id。当需要恢复窗口时,只能通过id号来恢复。
    2)通过命令screen -S name,这样就可以新建一个名字为name的窗口,同样系统也会分配给它一个id,当恢复该窗口时既可以通过id号也可以通过窗口名。

  • 分离会话
    退出当前新建的窗口,通过快键键Ctrl+a+d实现分离,此时窗口会跳出[detached]的提示,并回到主窗口。

  • 恢复会话窗口
    首先查看当前有哪些screen窗口,通过命令:
    screen -ls 将列出窗口列表

    由以上可知,当前有两个窗口,其中test窗口已经被杀死,test2窗口分离。可以通过以下命令恢复test2窗口:screen -r test2screen -r 27582这样就返回了test2窗口

  • 杀死会话窗口
    通过命令kill -9 threadnum
    注意此处只能通过id号来杀死窗口。

  • 清除死去窗口
    通过命令screen -wipe
    这个命令将自动清除所有处于dead状态的窗口