8个Linux进程管理命令详解及示例(四):kill、pkill 和 killall 命令

1.kill命令

kill 命令用于消除 Linux 命令行中的进程。

有时,会遇到消耗大量资源的进程,并希望尽快停止(或终止)它,那么这时候就要用到 kill 命令。

# kill 命令的语法及含义

复制代码
kill [option] [signal] PID
  • `option`\]:用于微调 `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>

例如,如果想知道编号为 18kill 信号的名称,可以使用以下命令:

复制代码
kill -l 18
2.pkill命令

pkill 命令也是用于终止 Linux 中的进程。

killpkill 命令之间的区别在于,kill 命令仅适用于进程 ID,而 pkill 命令仅适用于进程名称。

pkill 命令语法如下:

复制代码
pkill [options] pattern
  • `options`\]:使用可用选项,可以修改 `pkill` 命令的默认行为。例如,使用 `-u`标志,可以终止特定于用户的进程。

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.*'
相关推荐
热爱运维的小七几秒前
从数据透视到AI分析,用四层架构解决运维难题
运维·人工智能·架构
博观而约取9 分钟前
Linux 和 macOS 终端中常见的快捷键操作
linux·运维·macos
H13469489029 分钟前
华为服务器系统备份,想要备份华为服务器系统可以怎么操作?
运维·服务器·负载均衡
林政硕(Cohen0415)39 分钟前
Linux驱动开发进阶(三)- 热插拔机制
linux·驱动开发·热插拔
wangjun515941 分钟前
linux,物理机、虚拟机,同时内外网实现方案;物理机与虚拟机互通网络;
linux·服务器·网络
杰克崔1 小时前
分析sys高问题的方法总结
linux·运维·服务器
WSSWWWSSW1 小时前
安装nfs客户端(centos)
linux·运维·centos
深蓝易网1 小时前
为什么制造企业需要用MES管理系统升级改造车间
大数据·运维·人工智能·制造·devops
带娃的IT创业者1 小时前
《Python实战进阶》No39:模型部署——TensorFlow Serving 与 ONNX
pytorch·python·tensorflow·持续部署
a180079310801 小时前
软件工程面试题(二十二)
java·面试·软件工程