Contents

如何杀死独立的屏幕会话

1. 概述

**使用GNU screen 时,我们有时会得到需要清理的分离会话。**在这个快速教程中,我们将介绍一些用于终止分离screen会话的选项。

2. 屏幕会话

在我们开始讨论如何结束现有会话之前,让我们首先列出现有会话。首先,让我们设置几个示例屏幕会话。在 bash shell 中,我们输入:

% screen -dmS my_session_1
% screen -dmS my_session_2

这将创建两个名为my_session_1my_session_2的会话。请注意,我们都没有附加到任何一个(感谢*-d*选项)。现在,让我们看看我们创建的会话:

% screen -list

我们的两个会话出现:

There are screens on:
	84581.my_session_1	(Detached)
	76340.my_session_2	(Detached)

接下来,我们来谈谈如何杀死这些会话。

3. 附加并终止screen会话

我们可以终止 screen会话的一种方法是附加然后终止它。所以,让我们附加到我们上面创建的第一个会话:

% screen -r my_session_1

我们的命令提示符现在在我们的会话中。所以我们可以输入:

% exit

会话将结束,我们应该看到:

[screen is terminating]

现在我们只剩下一个会话了:

% screen -list
There is a screen on:
	76340.my_session_2	(Detached)

如果screen会话有多个窗口,我们必须在screen会话结束之前在每个窗口 输入exit  (或CTRL+ak ) 。一个更简单的替代方法是quit命令

CTRL+a \

(注意:你需要按住 CTRL+a 同时 按下 * 键。)这会提示我们确认:

Really quit and kill all your windows [y/n]

我们选择关闭所有会话窗口以结束 screen 会话。

上面附加的场景很简单,因为我们在同一个窗口中创建了screen会话。现在,如果有另一个终端或用户附加到我们要终止的会话,我们需要一个不同的命令来附加。在我们当前的终端窗口中,创建一个新会话:

% screen -S my_session_3

-S将创建会话并将其附加到它。现在,让我们打开第二个终端窗口并列出我们的 screen会话:

% screen -list
There is a screen on:
	19643.my_session_3	(Attached)

请注意,这现在是“已附加”,因为我们已附加在第一个终端中。在我们的第二个终端中,我们将强制会话从第一个终端窗口分离并附加到第二个终端。在第二个终端中,键入:

% screen -D -R my_session_3

我们的第二个终端现在处于 screen会话中。我们的第一个终端显示警告并返回终端:

[remote power detached]

现在我们可以使用 exit,如上一节所示。

4. 在不附加的情况下终止屏幕会话

作为附加到会话以结束它的替代方法,让我们看一下在不附加的情况下结束 screen会话的几种方法。 首先,让我们创建几个会话来杀死:

% screen -dmS my_session_4
% screen -dmS my_session_5

现在我们创建了两个会话:

% screen -list
There are screens on:
	19665.my_session_4	(Detached)
	19671.my_session_5	(Detached)

我们现在可以使用screen命令参数 -X向正在运行的screen会话发送命令。-S将 允许我们指定将接收命令的会话。因此,要向my_session_4发送exit命令 ,我们将使用:

% screen -S my_session_4 -X quit

screen -list显示了我们当前的 会话:

% screen -list
There is a screen on:
	19671.my_session_5	(Detached)

最后,我们总是可以通过操作系统命令终止 screen会话。名称前面的数字是 screen会话的 PID。要终止我们的最后一个会话,我们可以使用kill

% kill 19671

现在检查我们的 screen会话,我们将看到:

% screen -list
No Sockets found in /var/folders/wr/129xvd3dfecl/T/.screen.