如何杀死或终止 Linux 进程:终极指南

Linux 和 BSD 等多处理操作系统采用多种方法来最大化 CPU 利用率。 进程只是一个正在执行的程序。 由于在给定时间会运行多个 Linux 进程,因此 Linux 中的进程管理非常重要。 用户在运行太多程序时经常会遇到 CPU 资源限制等问题。 当 CPU 无法处理越来越多的进程时,就会出现这种情况。 尽管这并不完全取决于 CPU 的能力,但处理挂起或僵尸进程可能会非常令人沮丧。 为了帮助您减少此类事件的发生,我们概述了一些终止这些进程的标准方法。

掌握 Linux 中的无响应进程管理

您将学习几种终止完全没有响应的 Linux 进程的方法。 如果您来自 Windows,您可能熟悉 Ctrl+Alt+删除. 同样,Mac 用户拥有 Command+Option+Escape 杀死冻结进程的方法。 Linux 比它的同类产品更通用,并且提供了不止一种方法来处理死/无响应的进程。

杀死死 Linux 进程的不同方法

我们将主要概述两种杀死僵尸进程的方法。 我们将使用 Linux 终端作为第一种方法。 为此,我们首先需要识别进程 ID。 一旦成功获得,我们就可以使用这个 PID 通过向该 PID 发送特定信号来杀死程序。

您还将学习如何从图形用户界面或 X 窗口. 为此,我们将利用 Ubuntu 中可用的“系统监视器”应用程序。 尽管这是一个 GNOME 应用程序,但类似的工具也可用于其他 Linux 桌面环境。

从命令行终止无响应的进程

有几种工具可用于从命令行终止无响应或挂起的进程,包括 , 杀戮, 和 杀死所有. 这些命令通过向这些无响应进程发送特定信号来工作。 您将需要进程 ID 或 PID 信息,以便您可以向他们发送所需的终止信号。

PID 或进程 ID 是标识进程的唯一编号。 这些是由 Linux 内核在运行时创建的,进程调度程序控制它们的 CPU 活动。 因此,每当您调用应用程序时,内核将首先生成必要的进程并为它们分配这些唯一的 PID 值。 一个进程可以有多个 PID。 此外,每个进程都有一个具有唯一 PPID(父进程 ID)的父进程。

– –

所以,如果你能找到这个 PPID,那么你就可以使用为此目的设计的程序发送一个终止信号。 下面您将学习如何在 Linux 中检查正在运行的进程并从终端识别它们的 PPID。

找出 PPID 信息

您可以在 Linux 中使用多个进程管理命令来找出进程的 PPID,例如 pidof, pstree, 和 pgrep. 让我们一一检查,看看如何获​​取Linux进程的PID。

方法一:使用 ps 命令

Linux 中的 ps 命令显示所有正在运行的进程以及其他与进程相关的信息,例如终端中的 PID。 我们可以使用此命令列出所有进程,然后使用 Linux grep 命令过滤掉特定进程。 它应该向我们显示我们感兴趣的进程 ID 信息。

$ nano > /dev/null &
$ ps aux | grep "nano"

首先,我们在后台调用了一个 Linux 文本编辑器。 然后我们使用 ps 命令和 grep 命令来找出这个编辑器的 PPID。 输出可能包含多个进程 ID,但我们只对第一个感兴趣,因为那是我们的 PPID。 我们还可以使用 Linux awk 命令来查找此信息,如下所示。

$ ps aux | awk '/nano/ {print $2}'

这个命令更加灵活,因为它抑制了所有不相关的信息。 它只会显示我们正在寻找的 PPID 信息。

方法二:使用 pstree 命令

pstree 命令为我们提供了所有正在运行的进程的树状视图。 它从终端窗口提供 Linux 任务列表的图形视图。 您可以使用此命令查看 PPID 以及进程的所有 PID 信息。 查看以下示例,了解如何利用 pstree 查找特定进程的 PPID。

$ nano > /dev/null &
$ pstree -p | grep 'nano'
$ pstree -p | awk '/nano/ {print $NF}'

首先,我们使用第一个命令在后台生成了一个进程。 然后,第二个命令在 Linux 中使用 grep 命令检索此进程的 PPID。 最后,第三个命令向我们展示了如何使用 awk 命令检索该值。

方法 3:使用 pgrep 命令

pgrep 命令是 Linux 中最简单的进程管理命令之一。 它检查所有正在运行的进程的列表,并在标准输出或在我们的例子中的终端中打印出给定进程的 PPID。 它通过执行正则表达式匹配来工作,非常适合编写 Linux shell 脚本。

$ nano > /dev/null &
$ pgrep 'nano'

我们已经产生了与前面的例子类似的纳米过程。 然后我们通过使用 pgrep 命令获得了它的 PPID。 一旦我们获得了这个值,我们就可以很容易地执行 Linux 的 kill 任务。

方法四:使用 pidof 命令

pidof 命令是确定 Linux 进程的 PPID 的另一种简单但有用的方法。 它显示 PPID 和与进程关联的所有其他 PID。 查看以下检查以了解如何在实践中使用它。

$ nano > /dev/null &
$ pidof nano
$ pidof -s nano

在 Linux 中使用 pidof 命令检查正在运行的进程时,您经常会看到多个 PID。 通常,在这种情况下,第一个或最后一个数字是 PPID,具体取决于它们是升序还是降序。 您可以使用 -s pidof 的选项可以缓解这种情况。 它将仅显示 PPID 值。

pgrep pidof pstree

方法五:使用 top 命令

top 命令提供类 Unix 操作系统中所有正在运行的进程的实时视图。 您可以使用它在终端中显示 Linux 任务列表并找出特定进程的 PID 信息。

$ top

使用以下命令从 top 命令的输出中检索特定进程的 PPID。

$ nano > /dev/null &
$ top -n1 -b | grep 'nano'
$ top -n1 -b | awk '/nano/ {print $1}'

由于 top 提供实时输出而不是将静态数据转储到终端,因此我们使用了 -n1 -b 打印静态输出的选项。 然后,您可以在 Linux 中使用 grep 命令或 awk 命令检索 PPID 信息。

杀死无响应的 Linux 进程

您可以使用上述任何一种方法来检索无响应进程的 PPID。 一旦你获得了这个,是时候完全终止这个过程了。 有几个命令可以让我们这样做,例如 , 杀戮, 和 杀死所有. 我们将在以下部分中一一了解它们是如何工作的。

方法一:使用kill命令

由于其简单性和强大的操作,kill 命令被 Linux 管理员广泛使用。 它需要进程的PID和一个信号。 内核根据此信号终止/停止进程的执行。 您可以使用下一个命令查看 kill 命令的所有可用信号。

$ kill -l

如您所见,kill 提供了 64 种不同的信号。 但是,我们将在本指南中仅讨论其中两个。 它们是信号 9(SIGKILL)和信号 15(SIGTERM)。 SIGTERM 或信号 15 是杀死无响应进程的安全方法。 另一方面,SIGKILL 或信号 9 会强制终止 Linux 进程。

$ kill -9 8631
$ kill -KILL 8631

上述命令是等价的,它们将强制杀死具有 PID 8631 的进程。这是我系统中进程“nano”的 PPID。 将其替换为系统中无响应进程的 PID。

$ kill -15 8631
$ kill -TERM 8631

上面的命令也是等价的,并且会优雅地终止进程。 这就是为什么在进程被杀死之前可能需要一些时间。 此外,您可能需要附加 sudo 如果进程由不同的用户拥有,则在 kill 命令之前。

在 pgrep 之后杀死

方法二:使用 pkill 命令

pkill 命令是 Linux 中最通用的进程管理命令之一。 它允许我们根据名称、PID、所有者和其他运行时属性来终止无响应的进程。 对于初学者或不熟悉许多标准终端命令的人来说,它是一个完美的工具。

$ pkill nano
$ pkill 8631
$ pkill -e nano
$ pkill -f nano

您可以使用上述任何 pkill 命令来杀死 Linux 中的僵尸/无响应进程。 使用 -e 如果您想确认 Linux 终止作业,请选择此选项。 pkill 命令还允许用户发送特定的终止信号。

方法三:使用 killall 命令

killall 命令允许用户根据名称杀死无响应的进程。 它更容易使用,但如果您不小心,可能会带来麻烦。 由于 killall 根据名称终止进程,因此您总是有可能最终偶然杀死进程。 为了 example如果您的系统中有不同版本的 nano 可用,第一个 example 会杀了他们所有人。

$ killall nano
$ killall --verbose nano
$ killall --interactive nano
$ killall --signal KILL nano

首先 example 显示了 Linux 中 killall 命令的基本用法。 第二个命令会报告 kill job 是否成功,第三个命令会在杀死进程之前要求用户确认。 默认情况下,killall 使用 SIGTERM 信号来杀死进程。 但是,您可以手动指定信号,如上图所示 example.

方法 4:使用方便的单线

Linux 的真正美妙之处在于它允许用户根据自己的需要创建复杂的命令组合。 为了证明这一点,我们在本节中概述了一些单行代码。

$ nano > /dev/null &
$ kill -9 $(pgrep nano)
$ ps aux | grep -e 'nano' | awk '{print $2}' | xargs kill -9

在第一 example,我们使用 shell 插值将进程“nano”的 PID 传递给 Linux kill 命令。 第二 example 利用几个日常终端命令和 I/O 重定向来终止进程。 一旦您对 Linux 终端感到满意,您就可以创建自己漂亮的单行代码。

一个班轮杀死命令

方法 5:使用 Linux Shell 脚本杀死多个进程

有时用户可能想要终止多个进程。 我们可以通过编写简单的 shell 脚本轻松地自动化这些任务。 如果您对此主题感兴趣,请查看我们之前关于 Linux shell 脚本的指南。 以下脚本将检索您要终止的进程的 PPID,然后使用终止信号终止它们。

$ nano proc-killer.sh
#!/usr/bin/env bash

for pro in "[email protected]"
do
    pid=$(pgrep $pro | head -1)
    echo $pid

    comm="kill -9 $pid"
    eval $comm
done

现在,保存此文件并通过发出以下命令添加执行权限。

$ chmod +x proc-killer.sh

您现在可以将此脚本传递给您要终止的进程的名称。

$ ./proc-killer.sh nano gedit vlc

只需将参数替换为系统中无响应的 Linux 进程的名称即可。

进程杀手脚本

从 GUI 终止无响应的进程

您还可以从图形用户界面或 X 窗口终止无响应的进程。 我们将在下一节讨论两种方法。

方法 1:使用 xkill 应用程序

现代 Linux 发行版利用 X 图形窗口为用户提供优雅的图形体验。 有一个简单的工具叫做 xkill,它允许用户 close 无响应的 GUI 窗口。 这是可能的,因为在 Linux 中,应用程序的标题窗口与应用程序本身是分开的。

只需转到您的 Linux 终端仿真器并输入 xkill。 它会将你的鼠标光标变成一个 X 按钮,可以用来杀死任何 GUI 窗口。

$ xkill

现在,您只需单击无响应的应用程序的窗口栏,它就会被杀死并立即消失。

使用 xkill 杀死 Linux 进程

方法 2:在 Ubuntu 上使用系统监视器应用程序

大多数主流 Linux 发行版都带有某种 GUI 监控工具,允许用户以图形方式终止挂起的 Linux 进程。 为了 example,Ubuntu 上的系统监视器应用程序将使我们能够以直观的方式终止无响应的进程。 您可以简单地从进程列表中选择死进程并通过右键单击该进程并选择终止选项来终止它。

从系统监视器中杀死 Linux 进程

此应用程序还有更多替代方案,我们确信您可以轻松找到适合您的发行版或桌面环境的替代方案。

结束的想法

由于 Linux 中的进程管理非常通用,因此用户在处理无响应的进程时经常会感到沮丧。 这就是为什么我们的编辑在本指南中概述了终止死 Linux 进程的所有可能方法。 阅读本文后,您应该能够从命令行或 GUI 中终止任何无响应的进程。 您还可以使用我们的任何单行命令在尽可能短的时间内处理此类滋扰。 此外,您甚至可以使用我们简单的 shell 脚本杀死多个进程。 因此,希望您从我们的指南中获得了所需的信息。