如何在 Linux 中终止卡住或不需要的用户会话

需要有关 Linux 上卡住/不需要的用户会话的帮助吗?以下带您一起学习如何终止它们并保持系统平稳安全地运行。

前言

对于 Linux 用户来说,遇到卡住或不需要的用户会话可能是一种令人沮丧的经历。同时,这些会话可能会使您的系统面临潜在风险,使其容易遭受未经授权的访问或数据泄露。

因此,无论是由行为不当的应用程序、系统故障还是用户错误引起的,这些挥之不去的会话都会降低工作效率并损害系统安全性和性能。

本文旨在为您提供如果终止用户会话的方法和工具,以重新获得控制并维持 Linux 系统的平稳运行。通过学习处理这些情况的正确方法,您可以确保更安全的计算环境并保护您的宝贵数据。

然而,在继续之前,我们需要澄清 TTY 和 PTS 这两个术语的含义,这两个术语直接涉及 Linux 中的用户会话终止。

Linux 中的 TTY 和 PTS 是什么?

在Linux中,“PTS”和“TTY”都是指用于用户和操作系统之间通信的不同终端设备。它们充当输入命令和接收系统输出的接口。

TTY(电传打字机)

“TTY”最初代表 Teletype,一种类似打字机的设备,用于计算早期的输入和输出。在现代 Linux 系统中,TTY 代表物理或虚拟控制台,用户可以在其中直接与系统交互。

PTS(伪终端从机)

PTS 代表伪终端从机。它是模拟硬件终端但不直接连接任何物理设备的虚拟终端。相反,系统创建并管理它以支持终端复用、远程登录和各种交互式应用程序。

例如,当您使用终端模拟器应用程序(例如 GNOME 的 Terminal 或 KDE 的 Konsole)时,通常会使用伪终端来获取对 Linux 系统的 shell 访问权限。这些模拟器充当伪终端的“主”端,而终端内运行的 shell 或进程充当“从”端。

当您打开多个终端窗口或选项卡时,每个窗口或选项卡对应一个单独的 PTS。例如,如果您打开三个终端窗口,它们可能会被标识为/dev/pts/0、/dev/pts/1和/dev/pts/2。

如何在 Linux 中终止卡住/不需要的用户会话

您可以通过两种方式来完成此任务,因此我们将在下面逐一介绍。

通过 TTY 终止用户会话

我们将使用该w命令获取有关 Linux 系统上登录用户的信息。它显示有关当前登录用户及其活动的信息。当您运行该w命令时,它会提供每个用户的以下详细信息的摘要:

• USER:登录用户的用户名。

• TTY:与用户会话关联的终端名称或设备(例如,/dev/tty1、pts/0)。

• FROM:用户登录的远程主机或IP地址。如果用户在本地登录,则会显示TTY的名称或“ - ”符号。

• LOGIN@:用户登录的日期和时间。

• IDLE:用户会话不活动的持续时间。如果用户主动使用该终端,它将显示“旧”。

• JCPU:与用户会话关联的所有进程使用的总 CPU 时间。

• PCPU:用户当前进程使用的CPU时间。

• WHAT:用户执行的命令或与终端关联的进程。

以下是该命令的输出示例w:

linux w output

正如您从上面示例的输出中看到的,有 3 个登录用户 - 两个本地用户和一个远程用户。要终止远程登录用户“ linuxiac ”的用户会话,我们将pkill在 Linux 中使用带有选项“ -KILL ”的命令,这意味着必须立即终止 Linux 进程(不是优雅地),使用“ -t ”标志指定 TTY 的名称。

pkill -KILL -t pts/1
linux w output

就这样,通过重新检查该w命令可以看出,用户与我们系统的会话立即终止。

通过进程 ID 终止用户会话

我们将向您展示的第二种方法是通过进程 ID 终止用户会话。为此,我们w再次执行该命令以获取已登录用户及其关联的 TTY/PTS 列表。然后,一旦我们识别了 TTY/PTS 会话,请使用ps带有“ -ft ”参数的命令来查找其 PID:

ps -ft [TTY/PTS]

最后,使用kill带有“ -9 ”(无条件终止进程)开关的命令来传递进程 ID。例如:

kill -9 4374
linux terminate-user-session

结果,用户会话立即终止。

使用Shell脚本终止用户会话

1. 终止所有用户会话
下面的shell脚本将通过获取用户会话的tty值来终止所有用户的活动会话,并使用pkill命令将其终止:

#!/bin/bash
usession=$(w | awk '{if (NR!=1) {print $2 }}' | tail -n +2)
for i in $usession
do
pkill -9 -t $i
done

2. 终止指定用户的会话?
下面实例中,运行脚本后面加上用户名,就会终止这个用户的登录:

#!/bin/bash
usession=$(w $1 | awk '{if(NR!=1) {print $2}}'|tail -n +2)
for i in $usession
do
pkill -9 -t $i
done

结论

了解如何终止卡住或不需要的用户会话对于 Linux 系统管理领域至关重要。在本文中,我们探索了完成此任务的两种有效方法:TTY/PTS 或进程 ID。TTY/PTS 方法提供了一种终止用户会话的直接方法。另一方面,通过进程ID终止会话提供了一种更精确、更直接的方法。使用这两种方法中的哪一种?决定完全取决于您。

请记住,无论您选择 TTY/PTS 方法还是进程 ID 方法,都要谨慎行事。确保终止正确的用户会话或进程,以防止意外数据丢失或意外后果。