如何在 Linux 命令行中终止进程

在您的 Linux 系统上度过了美好的一天,突然一个进程开始减慢整个计算机的速度。 它不是那么重要,你想停止它的执行。

如果命令/进程在前台运行,您可以使用 Ctrl+C 终端快捷方式。 但是,如果进程不可见(在后台运行),您可以使用专用命令“杀死它”。

术语“终止进程”是指在执行过程中停止进程。 如果您知道进程 ID (PID),则可以使用 kill 命令,如下所示:

kill <signal> <PID>

在上面的语法中, signal 是指您要发送的终止信号,并且 PID 指进程的ID。

还有一个 killall 命令,我将在本文中讨论 kill 和 killall 命令。

在你开始杀死进程之前,你应该知道一些事情。 例如有哪些终止信号可用,如何找到 PID 等。

让我们先从信号开始。

Linux 中的终止信号

当一个进程被操作系统或用户终止时,即进程没有自行完成,它会被发送一个终端信号。

以下是可用的终止信号:

Signal数值描述
SIGHUP1Signal 挂断:当控制它的终端关闭时发送到进程。
信号情报2Signal 中断:当用户终止进程时发送给进程的信号。 (例如 Ctrl + X)
杀戮9Signal Kill:立即退出进程的信号,不允许它保存当前状态。
SIGTERM15Signal Terminate:发送到请求终止进程的信号。 该信号可以被进程忽略。 但这是终止进程的首选方式,因为它可以在进程收到 SIGTERM 时释放资源。
信号停止19(适用于 x86、ARM 和大多数其他)
17(用于阿尔法)
23(用于 MIPS)
24(对于巴黎)
Signal 停止: Signal 用于停止进程,但要在以后恢复。

您很可能会使用信号 9 和 15。阅读有关 SIGKILL 和 SIGTERM 之间区别的更多信息。

获取进程的PID

您还需要了解要终止的进程的详细信息。 使用 kill 命令,您必须提供进程的 ID (PID)。 您可以从进程名称中获取 PID:

pidof exact_process_name

在 Linux 命令行中终止进程

让我们先看看 kill 命令,因为您将比 killall 更多地使用它。

使用 kill 命令

kill 命令要求您知道要终止的进程的 ID,以及可选的终止信号。

要简单地终止命令,请使用以下语法:

kill [signal] <PID>

向 PID 发送终止信号是可选的,如果没有提供信号, kill 默认发送 SIGTERM (15),以优雅终止所述过程结束。

我启动了 sleep 命令的后台进程(它给了我一个 PID)。 让我们尝试使用 kill 命令。

杀死这个特定的实例 sleep 如下所示:

$  sleep 120 &
[1] 125686

$ kill 125686
[1]  + terminated  sleep 120

如果我想使用终止信号,我可以使用数值或信号本身:

$ sleep 120 &
[1] 125746

$ kill -SIGKILL 125746
[1]  + killed     sleep 120

####----##-----####

$ sleep 120 &
[1] 125759

$ kill -9 125759
[1]  + killed     sleep 120

?️如果 kill 命令没有指定信号,则默认使用 SIGTERM (15)。

使用 killall 命令

如果你不知道一个进程的PID是什么,或者如果该进程有多个子进程,并且你想一次杀死子进程和父进程,你可以使用 killall 命令。

killall [signal] <process-name>

如同 kill 命令,指定终止信号是可选的。 当没有指定终止信号时, killall 将发送 SIGTERM (15) 优雅地关闭所述进程。

演示使用 killall,我想杀死两个正在运行的睡眠命令。

$ sleep 120 &
[1] 18609

$ sleep 2000 &
[2] 18612

$ killall sleep
[1]-  Terminated              sleep 120
[2]+  Terminated              sleep 2000

此外,您可以使用 -e 标志以查找进程名称的完全匹配。

使用 pkill 命令

替代命令 kill 是个 pkill 命令。 这是一个“组合” pgrepkill 命令。

killall 杀死所有具有匹配名称的进程。 另一方面, pkill 使用模式匹配来匹配进程并杀死它们。

下面是语法:

pkill [options] pattern

一些有用的选项 pkill 命令如下:

  • -u : 特定所有者拥有的进程
  • -x : 完全匹配模式的进程
  • -signal : 指定终止信号(默认为 SIGTERM)

假设我有一个用户 guest 在我的计算机上当前不应该运行任何进程,如果有,我想终止它们。 我怎样才能做到这一点?

$ ps aux | grep sleep
guest     126061  0.0  0.0   6664   428 pts/3    S    10:14   0:00 sleep 50

$ sudo pkill -u guest

请注意,我使用 sudo 因为我正在处理不属于我的用户的进程。

通过本文,您学习了 3 种用于在 Linux 中终止进程的不同命令。 我觉得这将是你比其他人更多的杀戮命令。 我对吗?