使用 Linux 终端时,有时会卡住,失去响应,这时应该如何终止会话?

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

无论是由行为不端的应用程序、系统故障还是用户错误引起的,这些延迟的会话都会阻碍生产力,并危及系统的安全性和性能。

但不要害怕;本文旨在为您提供重新获得控制权和维护平稳运行的Linux系统的知识和工具。通过学习处理这些情况的正确方法,您可以确保一个更安全的计算环境,并保护您的宝贵数据。

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

在Linux中什么是 TTY 和 PTS?

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

TTY (Teletype)

“TTY”最初代表电传打字机(Teletype),这是一种类似打字机的设备,在计算机早期用于输入和输出。

在现代 Linux 系统中,TTY 代表一个物理或虚拟控制台,用户可以在此处直接与系统互动。

PTS (Pseudo-Terminal Slave)

PTS代表伪终端从设备。它是一个虚拟终端,模拟硬件终端,但不直接连接到任何物理设备。

相反,系统创建并管理它,以支持终端多路复用、远程登录和各种交互式应用程序。

例如,当您使用终端模拟器应用程序(如GNOME的终端或KDE的Konsole)来访问Linux系统时,通常会使用伪终端。

这些仿真器充当伪终端的“主”端,而shell或在终端中运行的进程充当“从”端。

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

总之,TTY和PTS都是Linux中的终端设备,允许用户与操作系统交互。TTY表示物理或虚拟控制台,而PTS用于终端模拟器,并提供多路复用和远程登录的附加功能。

有了这样的澄清,我们现在可以继续讨论主要议题。

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

阻塞我们一般俗称“卡住” 😆

你可以通过两种方式来实现这一点,因此我们将在下面分别进行研究。

通过 TTY 终止用户会话

我们将使用 w 命令来获取有关我们 Linux 系统上已登录用户的信息。它显示了当前登录用户的信息和他们的活动。

当你运行 w 命令时,它会为每个用户提供以下细节的摘要:

  • USER: 当前登录用户的用户名
  • TTY: 与用户会话相关联的终端名称或设备(例如/dev/tty1,pts/0)
  • FROM: 用户登录的远程主机或IP地址。如果用户在本地登录,它将显示 TTY’s name 或者 - 符号
  • LOGIN@: 用户登录的日期和时间
  • IDLE: 用户会话处于非活动状态的持续时间。如果用户主动使用终端,它将显示 old
  • JCPU: 与用户会话相关联的所有进程使用的CPU总时间
  • PCPU: 用户当前进程使用的CPU时间.
  • WHAT: 用户执行的命令或与终端相关联的进程

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

获取在Linux上登录用户的信息

获取在Linux上登录用户的信息

正如您从上面的示例输出中看到的,有三个登录的用户——两个是本地用户,一个是远程用户。

要终止远程登录用户“linuxiac”的用户会话,我们将在Linux中使用带有选项-KILLpkill命令,这意味着Linux进程必须立即终止(而不是优雅地)。使用“-t”标志指定TTY的名称。

1
pkill -KILL -t pts/1

在Linux上通过 TTY/PTS 名称终止一个用户会话

在Linux上通过 TTY/PTS 名称终止一个用户会话

仅此而已。从w命令的重新检查可以看出,用户与我们系统的会话立即终止。

按进程ID终止用户会话

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

1
ps -ft [TTY/PTS]

最后,使用带有传递进程ID的-9(强制终止进程)开关的kill命令。例如:

1
kill -9 4374

在Linux上通过进程ID终止用户会话

在Linux上通过进程ID终止用户会话

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

如何终止一个阻塞的前台进程

大部分程序在终端的前台启动后,使用 CTRL-C 是可以退出当前运行的程序的。但有一部分程序由于没有处理输入信号,或者正在请求网络连接阻塞了输入信号的处理,这时候使用 CTRL-C 是不管用的。

这种情况的处理办法就是,先使用 CTRL-Z 把程序放入后台,然后通过 ps 命令找到程序进程的ID号,最后使用 kill -9 PID 的方式强行把进程杀掉。 😁

针对这个情况的另外一个办法,就是再开一个登录窗口,把之前的登录用户使用上面提到的两种方式结束用户会话。

结论

在Linux系统管理领域中,知道如何终止阻塞或不需要的用户会话是至关重要的。在本文中,我们探索了两种有效的方法来完成这项任务:TTY/PTS或流程ID。

TTY/PTS方法提供了一种直接终止用户会话的方法。另一方面,通过进程ID终止会话提供了一种更精确、更直接的方法;使用这两种方法中的哪一种?这个决定完全取决于你。

请记住,无论您选择TTY/PTS方法还是流程ID方法,谨慎行事都是至关重要的。确保终止正确的用户会话或进程,以防止意外数据丢失或意外后果。查看pkillkill命令手册页获取更多详细说明。

公众号

欢迎关注我的公众号,同步更新

木木小小孩

参考资料

  1. How to Terminate Stuck or Unwanted User Sessions in Linux