8个Linux进程管理命令详解及示例(四):kill、pkill 和 killall 命令
1.kill命令
kill
命令用于消除 Linux 命令行中的进程。有时,会遇到消耗大量资源的进程,并希望尽快停止(或终止)它,那么这时候就要用到
kill
命令。#
kill
命令的语法及含义kill [option] [signal] PID
[
option
]:用于微调kill
命令的默认行为。[
signal]
:在这里指定希望用来终止进程的kill
信号。
PID
:要终止的进程的进程 ID。首先,来看看
kill
命令的可用选项:
选项 描述 -s
通过名称或数字指定要发送的信号(例如,-s SIGINT 或 -s 2)。此选项允许向进程发送特定信号,而不是默认的 SIGTERM 信号。
-q
使用 sigqueue(3) 而不是 kill(2) 发送信号,允许随信号一起发送一个额外的整数值。
-l
列出所有信号名称及其对应的值。此选项提供所有可用信号的列表及其数值。
-L
以更友好的格式列出所有信号名称。类似于 -l 选项,但以更易读的格式显示信号名称及其描述。
使用 kill 命令的可用信号:
信号名称 信号值 描述 SIGHUP
1
挂起信号,用于重启或重新加载进程。
SIGINT
2
中断信号,当按下 Ctrl+C 时发送。
SIGQUIT
3
退出信号,用于生成进程的核心转储文件。
SIGILL
4
非法指令信号,当进程尝试执行非法指令时发送。
SIGTERM
15
终止信号,kill 命令默认发送的信号。
SIGKILL
9
强制终止信号,立即终止进程。
SIGSTOP
19
停止信号,用于暂停或挂起进程。
SIGCONT
18
继续信号,用于恢复被挂起的进程。
SIGTSTP
20
终端停止信号,当按下 Ctrl+Z 时发送。
SIGCHLD
17
子进程信号,当子进程终止或停止时发送给父进程。
如果在执行
kill
命令时不指定kill
信号,它将利用SIGTERM
信号来终止进程。下面列举
kill
命令的日常使用实例:1.1终止进程
要使用
kill
命令终止进程,只需为kill
命令指定PID
,它就会终止进程:kill <PID>
例如,想终止Slack 桌面,就用 PID 78210 来终止 :
kill 78210
此外,如果要一次杀死多个进程,可以指定它们的 PID,以空格分隔,如下所示:
kill PID1 PID2 PIDn
1.2通过指定 kill 信号终止进程
在大多数情况下,默认的
kill
信号可以完成工作,但如果想使用特定的信号怎么办?这时可以用-s
标志。kill -s <SIGNAL-NAME/SIGNAL-NUMBER> PID
例如,用
SIGKILL
信号来终止PID为3532的进程:kill -s SIGKILL 3532
1.3列出可用的 kill 信号
要列出可用的
kill
信号,请使用-L
如下所示的标志:kill -L
仔细观察,上面的输出会重复
kill
信号。要解决此问题,可以使用
kill
信号的独立版本来列出可用的kill
信号:/usr/bin/kill -L
1.4使用数字查找 kill 信号名称
如果现在有一个
kill signal
编号,可以使用-l
标志来查找它的名称:kill -l <Signal-number>
例如,如果想知道编号为
18
的kill
信号的名称,可以使用以下命令:kill -l 18
2.pkill命令
pkill
命令也是用于终止 Linux 中的进程。
kill
和pkill
命令之间的区别在于,kill
命令仅适用于进程 ID,而pkill
命令仅适用于进程名称。
pkill
命令语法如下:pkill [options] pattern
[
options
]:使用可用选项,可以修改pkill
命令的默认行为。例如,使用-u
标志,可以终止特定于用户的进程。
pattern
:用于终止进程的名称或模式,可以是进程名称、正则表达式或其他条件。
pkill
命令的可用选项如下:
选项 描述 -u USER
仅终止指定用户拥有的进程。可以提供用户名或用户ID。
-f
根据完整命令行终止进程,而不仅仅是进程名称。允许终止命令行中包含特定参数或选项的进程。
-x
仅终止名称与提供的模式完全匹配的进程。
-n
仅终止符合条件的最新启动的进程。当有多个同名进程时,此选项有助于仅终止最新的进程。
-s SESSIONID
仅终止属于指定会话ID的进程。
-P PID
仅终止父进程ID与指定ID匹配的进程。允许终止特定父进程的子进程。
-g GROUPID
仅终止属于指定进程组ID的进程。进程组是共享相同进程组ID的相关进程集合。
-o
仅终止符合条件的运行时间最长的进程。当希望终止运行时间最长的进程时,此选项非常有用。
-SIGNAL
指定要发送给目标进程的信号。默认情况下,pkill 发送 SIGTERM 信号。
下面列举
pkill
命令的一些实例:2.1按名称终止进程
pkill process-name
例如,如果想终止 firefox ,那么可以使用以下命令:
pkill firefox
2.2终止其他用户的进程
注:要终止其他用户的进程,需要超级用户权限。
如果要终止其他用户的进程,使用
-u
标志,同进附加用户名和进程名称来完成:sudo pkill -u <username> <process-name>
例如,使用以下命令终止用户 kabir 的活动进程
htop
:sudo pkill -u kabir htop
2.3基于整个命令行的 kill 进程
假设正在运行一个具有多个参数的脚本,现在想要终止使用特定参数执行的脚本。在这种情况下,可以使用带 -
f
标志的pkill
命令:pkill -f "process-name --arg1 value1 --arg2 value2"
例如,正在运行一个名为
my_script.sh
具有 3 个参数的脚本:--file input.txt
、--output output.txt
和--timeout 30
,执行方法如下:pkill -f "./my_script.sh --file input.txt --output output.txt --timeout 30"
2.4终止具体的进程
使用
pkill
命令终止进程时,它可能会终止以相同名称开头的进程。当我使用
pkill firefox
时,它终止了Firefox
浏览器。但实际的进程名称是firefox-bin
,这意味着它终止了以字符串firefox
开头的进程。要按进程的确切名称终止进程,需使用
-x
标志:pkill -x process-name
下面命令是用 Firefox 浏览器的确切名称来终止它的:
pkill -x firefox-bin
2.5在 pkill 命令中使用不同的 kill 信号
默认情况下,对于大多数进程,
pkill
使用SIGTERM
信号,它是终止进程的一种礼貌方式。要使用其他
kill
信号,可以使用以下语法:pkill -<signal_number/signal_flag> process
以下是一些可以与
pkill
命令一起使用的常用kill
信号:
信号标志 信号值 描述 HUP
1
挂起信号,用于重新加载或重启进程。
INT
2
中断信号,用于中断进程(通常通过 Ctrl+C 触发)。
QUIT
3
退出信号,用于终止进程并生成核心转储文件。
KILL
9
强制终止信号,用于强制终止进程,不允许进程进行清理操作。
TERM
15
终止信号,用于优雅地终止进程(默认信号)。
STOP
19
停止信号,用于暂停进程的执行。
TSTP
20
终端停止信号,用于停止或暂停进程(通常通过 Ctrl+Z 触发)。
CONT
18
继续信号,用于恢复已停止或暂停的进程。
例如,如果想使用 KILL 信号终止 Firefox 浏览器,可以通过两种方式来实现。可以直接使用
kill
信号:pkill -9 firefox-bin
或者,可以按以下方式指定想要使用的 KILL信号:
pkill -KILL firefox-bin
3.killall 命令
Linux 中的
killall
命令允许使用进程名称终止进程。也可以使用kill
命令执行相同的作,但它需要一个特定的选项来使用进程名称而不是PID
。其语法格式为:
killall [OPTIONS] name
[OPTIONS]
:可选标志(也称为选项),用于修改killall
命令的默认行为。例如,可以使用-I
选项 执行不区分大小写的搜索。
name
:要终止的进程的名称。
killall
命令的可用选项:
选项 描述 -e
要求进程名称完全匹配。
-I
以不区分大小写的方式匹配进程名称。
-i
在终止进程之前交互式地请求确认。
-q
如果未找到进程,则抑制错误消息。
-r
将进程名称解释为正则表达式。
-s SIGNAL
指定要发送的信号以终止进程(默认为 SIGTERM)。
-u USER
终止指定用户拥有的进程。
-v
报告信号是否成功发送(详细输出)。
-w
等待所有被终止的进程完全结束。
下面列举
killall
命令的实际示例:3.1终止特定进程
killall process-name
例如,如果想要终止
htop
,那么可以使用以下命令:killall htop
3.2发送特定的 kill 信号
默认情况下,
killall
命令使用SIGTERM
终止信号,这在大多数情况下已经足够了,但有时在终止进程时,可能预计会出现不同的行为。
killall
命令允许从多个要终止信号中进行选择。要使用多个终止信号,请将-s
标志与终止信号一起使用,如下所示:killall -s <Termination_Signal> process
例如,如果想使用
SIGKILL
信号终止apache2
进程,那么使用以下命令:killall -s SIGKILL apache2
3.3以交互方式终止进程
采用
-i
选项来实现:killall -i process
例如,下面在终止
htop
进程时使用了交互式提示符:killall -i htop
3.4终止特定用户拥有的进程
当尝试终止其他用户拥有的进程时,它会显示一条错误消息:“Operation not permitted”。
要终止特定用户拥有的进程,可以使用
-u
标志指定用户名和进程名称,如下所示:sudo killall -u <username> process
例如,如果想终止用户 team 拥有的
htop
进程,那么使用以下命令:sudo killall -u team htop
3.5使用正则表达式终止进程
如果想一次杀死多个进程,那么可以使用正则表达式,要使用正则表达式,必须使用如下所示的
-r
标志:kill -r REGEX
例如,如果想终止名称以“http”开头的所有进程,例如“httpd”或“http-server”,可以使用以下命令:
killall -r 'http.*'