你有没有这样的经历:你有一台远程计算机,并在上面执行长时间运行的任务,突然连接断开,SSH 会话终止,而导致你的工作进度丢失。
幸运的是,有一个名为 Screen 的实用程序可以让我们持续会话。甚至是远程计算机用户注销的情况下程序依然在后台运行。
使用情境:
在开始使用“screen”之前,您需要确保它已安装在您的 Linux 服务器上。大多数现代 Linux 发行版都预装了“screen”,但如果您的系统上没有它,您可以使用特定于您的发行版的包管理器轻松安装它。
对于基于 Debian/Ubuntu 的系统,请使用以下命令:
sudo apt-get update
sudo apt-get install screen
对于 Red Hat/CentOS 系统,请使用:
sudo yum install screen
对于 Arch Linux,请使用:
sudo pacman -S screen
在控制台中输入screen就可以打开一个屏幕会话,创建一个新窗口,并在该窗口中启动一个 shell。但是我强烈建议在创建 Screen 的时候给这个会话取一个名字(后期会话多了之后会分不清)。把<Name>替换成你想取的名字。比如:screen -S app
screen -S <Name>
现在您已经创建了一个screen的屏幕会话。
你可以在新弹出的命令行中执行你的程序,然后甚至关掉命令行窗口。
如果你想screen在后台运行,只需要输入
Ctrl+a d
脱离会话后,在screen会话中运行的程序将继续运行。
在过了一段时间后,你想查询程序运行的情况或者结果如何。你只需要在命令行中输入:
screen -ls
就会列出screen正在运行的会话:
There are screens on:
10835.app (Detached)
10366.pts-0.linuxize-desktop (Detached)
2 Sockets in /run/screens/S-linuxize.
可以看到当前有两个会话正在运行,其中一个就是我们刚创建的叫app的会话。如果想恢复/查看app会话的内容只需要输入:
screen -r 10835
如果你想结束一个screen会话,还是以app会话为例,你只需要输入:
screen -XS 10835 quit
此时再用 screen -ls 查看时 app 会话将不复存在。
以下是管理 Linux Screen Windows 的一些最常用命令:
Ctrl+a c创建一个新窗口(带shell)。
Ctrl+a "列出所有窗口。
Ctrl+a 0切换到窗口 0(按编号)。
Ctrl+a A重命名当前窗口。
Ctrl+a S将当前区域水平分割为两个区域。
Ctrl+a |将当前区域垂直分割为两个区域。
Ctrl+a tab将输入焦点切换到下一个区域。
Ctrl+a Ctrl+a在当前窗口和上一个窗口之间切换
Ctrl+a Q关闭除当前区域之外的所有区域。
Ctrl+a X关闭当前区域。
本文记录screen的基本用法,更多详细用法可以参考这里
[1] https://linuxize.com/post/how-to-use-linux-screen/
[2] https://askubuntu.com/questions/356006/kill-a-screen-session