如何在Linux中使用Kill命令?
发现行为不当的进程?以下是如何通过使用各种命令终止它来对其进行教训。
这对你的 Linux 系统来说是美好的一天,突然一个进程开始减慢整个计算机的速度。它并不那么重要,你想停止它的执行。
如果命令/进程在前台运行,您可以使用 Ctrl+C 终端快捷方式。但是,如果该进程不可见(在后台运行),您可以使用专用命令“杀死它”。
术语“终止进程”是指在执行过程中停止进程。如果您知道进程 ID (PID),则可以使用如下的 Kill 命令:
kill <signal> <PID>
在上面的语法中,signal
指的是要发送的终止信号,PID
指的是进程的 ID。
还有一个killall 命令,我将在本文中讨论kill 和killall 命令。
在开始终止进程之前,您应该了解一些事情。比如有哪些终止信号可用,如何找到PID等。
我们首先从信号开始。
Linux 中的终止信号
当一个进程被操作系统或用户终止时,即该进程没有自行完成,它会被发送一个终端信号。
以下是 Linux 中可用的终止信号:
Signal | Numerical Value | Description |
---|---|---|
SIGHUP | 1 | Signal Hangup: Sent to a process when the terminal controlling it is closed. |
SIGINT | 2 | Signal Interrupt: The signal sent to a process when a user terminates a process. (eg Ctrl + X) |
SIGKILL | 9 | Signal Kill: The signal that immediately quits a process, without allowing it to save its current state. |
SIGTERM | 15 | Signal Terminate: Sent to the signal to request termination of process. This signal can be ignored by a process. But this is the preferred way of terminating a process as it can release the resources when the process receives SIGTERM. |
SIGSTOP | 19 (for x86, ARM and most others) 17 (for Alpha) 23 (for MIPS) 24 (for PARISC) |
Signal Stop: Signal for stopping a process, but to be resumed at a later time. |
您很可能会使用信号 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
使用killall命令
如果你不知道某个进程的PID是多少,或者该进程有多个子进程,而你想一次性杀死子进程和父进程,可以使用killall命令。
killall [signal] <process-name>
与kill
命令类似,指定终止信号是可选的。当未指定终止信号时,killall
将发送 SIGTERM (15
) 以正常关闭该进程。
为了演示 killall
的使用,我想终止两个正在运行的 sleep 命令。
$ 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 是因为我正在处理不属于我的用户的进程。
通过本文,您学习了在 Linux 中终止进程的 3 种不同命令。我感觉你比其他人更会执行kill命令。我对吗?