如何终止 Linux screen 会话

LinuxBeginner
立即练习

介绍

本教程将概述 Linux Screen 的基础知识,它是一个强大的终端复用器,允许你在单个窗口中创建、管理和导航多个终端会话。你将学习如何启动、分离和重新连接到 Screen 会话,并探索这个多功能工具的实际应用。

理解 Linux Screen 的基础知识

Linux Screen 是一个强大的终端复用器,允许你在单个窗口中创建、管理和导航多个终端会话。它提供了一种同时运行多个命令或应用程序、使它们在后台运行,并在它们之间无缝切换的方法。

Linux Screen 的主要用例之一是启用持久会话(persistent sessions)。这意味着你可以启动一个长时间运行的进程,从会话中分离(detach),然后在以后重新连接(reattach)到它,即使是从不同的位置或设备。这对于远程服务器管理、运行自动化脚本或维护不应中断的长时间运行的进程等任务特别有用。

Linux Screen 的另一个关键特性是它支持共享会话(shared sessions)。这允许多个用户连接到同一个 Screen 会话,从而实现协作和远程协助。这在多个团队成员需要一起处理同一个项目或解决问题的情况下特别有用。

为了演示 Linux Screen 的基本用法,让我们启动一个新的 Screen 会话。打开你的终端并输入以下命令:

screen

你现在将进入一个新的 Screen 会话。你可以通过终端看起来略有不同,或者你可能会看到一条欢迎消息来判断你是否在 Screen 会话中。

现在,让我们在这个 Screen 会话中运行一个简单的命令。我们将使用 top 命令来查看正在运行的进程。

top

你应该看到 top 命令的输出,显示系统进程。

top - HH:MM:SS up  X days, HH:MM,  X users,  load average: X.XX, X.XX, X.XX
Tasks: XXX total,   X running, XXX sleeping,   X stopped,   X zombie
%Cpu(s):  X.X us,  X.X sy,  X.X ni, XX.X id,  X.X wa,  X.X hi,  X.X si,  X.X st
MiB Mem :  XXXX.X total,  XXXX.X free,   XXX.X used,  XXXX.X buff/cache
MiB Swap:     0.0 total,     0.0 free,     0.0 used.  XXXX.X avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
   XXXX labex     20   0  XXXXXX  XXXXX  XXXXX S   X.X   X.X   X:XX.XX top
   XXXX labex     20   0  XXXXXX  XXXXX  XXXXX S   X.X   X.X   X:XX.XX zsh
   ...

要退出 top 命令,请按 q

现在,让我们从这个 Screen 会话中分离(detach)。这将使会话在后台运行。要分离,请按 Ctrl+A,然后按 d

Ctrl+A, d

你应该看到一条消息,指示你已从 Screen 会话中分离。

[detached from ...]
Illustration of detaching from Screen session

你现在回到了你原来的终端会话。带有 top 命令(你已退出)的 Screen 会话仍在后台运行。

列出和重新连接到 Screen 会话

现在你已经从一个 Screen 会话中分离,让我们学习如何列出正在运行的会话并重新连接到其中一个。

要列出所有正在运行的 Screen 会话,请在你的终端中使用 screen -ls 命令。

screen -ls

你应该看到类似于这样的输出,显示你已分离的会话:

There is a screen on:
        XXXXX.pts-X.labex       (Detached)
X Sockets in /run/screen/S-labex.

输出显示了会话 ID(例如,XXXXX.pts-X.labex)及其状态(Detached)。

要重新连接到最近分离的 Screen 会话,请使用 screen -r 命令。

screen -r

你现在应该回到你的 Screen 会话中。由于你在上一步中退出了 top 命令,你可能会在 Screen 会话中看到一个标准的终端提示符。

Illustration of reattaching to Screen session

如果你有多个 Screen 会话正在运行,你可以通过在 screen -r 命令后提供其会话 ID 来重新连接到特定的会话。例如,如果会话 ID 是 12345,你将使用:

screen -r 12345

对于这个实验(Lab),由于你可能只有一个会话,screen -r 就足够了。

现在你回到了 Screen 会话中,让我们正确地退出它。你可以在 Screen 会话中输入 exit 来做到这一点。

exit

这将终止 Screen 会话,并使你返回到你原来的终端。

你可以通过再次列出 Screen 会话来验证会话是否已关闭:

screen -ls

你应该看到输出表明没有 Screen 会话正在运行:

No Sockets in /run/screen/S-labex.
Output showing no running sessions

终止 Screen 会话

在上一步中,你学习了如何使用 exit 命令从会话内部退出 Screen 会话。但是,有时你可能需要从会话外部终止 Screen 会话,例如,如果会话没有响应,或者你只是想在不重新连接的情况下关闭它。

要从你原来的终端终止一个特定的 Screen 会话,你可以使用 screen -X -S [session_id] quit 命令。你需要会话 ID,你可以从 screen -ls 获取它。

首先,让我们启动一个新的 Screen 会话,以便我们有一个可以终止的会话。

screen

现在,使用 Ctrl+A, d 从这个会话中分离(detach)。

Ctrl+A, d

列出正在运行的会话以获取会话 ID。

screen -ls

从输出中记下会话 ID(例如,XXXXX.pts-X.labex)。

现在,使用 screen -X -S [session_id] quit 命令来终止会话。将 [session_id] 替换为你记下的实际 ID。

screen -X -S XXXXX.pts-X.labex quit

如果命令成功,你应该看不到任何输出。

要确认会话已终止,请再次列出 Screen 会话。

screen -ls

你应该看到输出表明没有 Screen 会话正在运行。

No Sockets in /run/screen/S-labex.

当你无法直接访问 Screen 会话时,此方法对于强制终止 Screen 会话非常有用。

Illustration for terminating Screen session

总结

Linux Screen 是一个用于管理和维护持久终端会话的宝贵工具。通过了解如何创建、分离(detach)、列出、重新连接和终止 Screen 会话,你可以运行长时间运行的进程,与团队成员协作,并确保你的关键任务即使在你没有直接连接到终端时也能继续运行。本教程涵盖了使用 Linux Screen 的基本概念和实际示例,使你掌握了增强你的生产力并简化你基于终端的工作流程的知识。