在您的 Linux 系统上度过了美好的一天,突然一个进程开始减慢整个计算机的速度。 它不是那么重要,你想停止它的执行。
如果命令/进程在前台运行,您可以使用 Ctrl+C 终端快捷方式。 但是,如果进程不可见(在后台运行),您可以使用专用命令“杀死它”。
术语“终止进程”是指在执行过程中停止进程。 如果您知道进程 ID (PID),则可以使用 kill 命令,如下所示:
kill <signal> <PID>
在上面的语法中, signal
是指您要发送的终止信号,并且 PID
指进程的ID。
还有一个 killall 命令,我将在本文中讨论 kill 和 killall 命令。
在你开始杀死进程之前,你应该知道一些事情。 例如有哪些终止信号可用,如何找到 PID 等。
让我们先从信号开始。
Linux 中的终止信号
当一个进程被操作系统或用户终止时,即进程没有自行完成,它会被发送一个终端信号。
以下是可用的终止信号:
Signal | 数值 | 描述 |
---|---|---|
SIGHUP | 1 | Signal 挂断:当控制它的终端关闭时发送到进程。 |
信号情报 | 2 | Signal 中断:当用户终止进程时发送给进程的信号。 (例如 Ctrl + X) |
杀戮 | 9 | Signal Kill:立即退出进程的信号,不允许它保存当前状态。 |
SIGTERM | 15 | Signal 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
命令。 这是一个“组合” pgrep
和 kill
命令。
这 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 中终止进程的不同命令。 我觉得这将是你比其他人更多的杀戮命令。 我对吗?