Linux screen 命令:在连接断开的情况下保持进程运行
在此页
- 1 安装屏幕命令
- 2 使用屏幕命令
- 3 我的连接断开了 - 我该怎么办?
- 4 个链接
我想你们都知道这一点:您使用 SSH 连接到您的服务器,并且正在编译一些软件(例如新内核)或执行其他需要花费大量时间的任务,突然您的连接由于某种原因断开,并且你失去了你未完成的工作。这可能非常烦人,但幸运的是,有一个名为 screen 的小实用程序可以让您重新连接到之前的会话,以便您可以完成任务。这个简短的教程展示了如何使用屏幕来达到这个目的。
1 安装屏幕命令
屏幕的安装非常容易。在 Debian 上,运行:
apt-get install screen
对于 Ubuntu,使用带有 sudo 的命令:
sudo apt-get install screen
对于 Fedora、CentOS、SuSE 和 Mandriva,还有屏幕包,您可以使用 yum/yast/urpmi/...
Fedora 和 CentOS
yum install screen
2 使用屏幕命令
使用 screen,您可以在当前的 SSH 终端中创建一个或多个会话。赶紧跑
screen
启动它。这会在您当前的 SSH 终端中创建一个屏幕会话或窗口(尽管您看不到它):

按 Space 或 Return 键进入命令提示符:

看起来像您的普通 SSH 终端,不是吗?
现在我将描述控制屏幕所需的最重要的屏幕命令。这些命令以 CTRL a 开头,以区别于普通的 shell 命令。
- Ctrl a c - 创建一个新的屏幕会话,以便您可以一次使用多个屏幕会话。
- Ctrl a n - 切换到 next 屏幕会话(如果您使用多个)。
- Ctrl a p - 切换到 p 上一个屏幕会话(如果您使用多个)。
- Ctrl a d - 分离屏幕会话(不终止其中的进程 - 它们继续)。
要关闭所有任务都已完成的屏幕会话,您可以键入
exit
现在让我们尝试一下。在我们的屏幕窗口中,我们运行命令
top
这应该是这样的:

现在让我们通过键入创建另一个屏幕会话
Ctrl a c
一个新的空白屏幕会话打开,我们在那里运行
tail -f /var/log/mail.log
持续查看我们的邮件日志:

现在您可以通过运行来浏览您的两个屏幕会话
Ctrl a n
或者
Ctrl a p
要分离屏幕会话并返回到您的普通 SSH 终端,请键入
Ctrl a d
回到你的普通 SSH 终端,你可以运行
screen -ls
获取当前屏幕会话的列表:
There are screens on:
2477.pts-0.server1 (Detached)
2522.pts-0.server1 (Detached)
2 Sockets in /var/run/screen/S-root.
要重新连接到这些会话之一,请运行
screen -r 2477.pts-0.server1
其中 2477.pts-0.server1 是来自屏幕 -ls 输出的会话之一的名称。
要离开并完成屏幕会话,请完成其中的所有当前任务(top 可以通过键入 q 完成,tail -f /var/log/mail.log 可以通过键入 CTRL c 完成)然后键入
exit
然后您将返回到另一个屏幕会话(如果您使用多个)或正常的 SSH 终端,如果没有更多的屏幕会话打开。
如果您想了解有关屏幕的更多信息,请运行
man screen
3 我的连接断开了 - 我该怎么办?
现在假设您在屏幕会话中编译内核,这通常需要很长时间,然后您的连接突然断开。感谢屏幕,您的工作没有丢失。连接恢复后,再次使用 SSH 登录系统并运行
screen -ls
如第 2 章所示。从结果中选择一个会话(例如 2477.pts-0.server1)并重新附加到它:
screen -r 2477.pts-0.server1
如果您选择了正确的会话,您应该会发现您的内核仍在编译(如果它在此期间尚未完成),以便您可以继续您的工作。
4个链接
- 屏幕:http://www.gnu.org/software/screen