1、命令简介
pkill:用于根据进程名或其他条件来终止(杀死)进程。它与 kill 命令不同,pkill 可以根据进程名进行杀死,而不需要指定进程的PID(进程ID)。
2、命令语法
pgrep [-flvx] [-d delimiter] [-n|-o] [-P ppid,...] [-g pgrp,...] [-s sid,...] [-u euid,...] [-U uid,...] [-G gid,...] [-t term,...] [pattern] pkill [-signal] [-fvx] [-n|-o] [-P ppid,...] [-g pgrp,...] [-s sid,...] [-u euid,...] [-U uid,...] [-G gid,...] [-t term,...] [pattern]
3、命令描述
pgrep
遍历当前正在运行的进程,并将与选择条件匹配的进程的进程ID列表显示在标准输出上。所有条件都必须匹配。例如,pgrep -u root sshd
只会列出由root拥有的名为sshd的进程。另一方面,pgrep -u root,daemon
会列出由root或daemon拥有的进程。
pkill
将发送指定的信号(默认为SIGTERM)给每个进程,而不是将它们列在标准输出上。
4、命令选项
选项 | 描述 |
-signal 或 -s signal | 发送指定的信号到匹配的进程。 |
-l | 列出所有可用的信号。 |
-u user | 只匹配指定用户的进程。 |
-U user | 只匹配指定的真实用户ID的进程。 |
-g pgrp | 只匹配指定的进程组。 |
-t terminal | 只匹配在指定终端上运行的进程。 |
-x | 只匹配那些与提供的名字完全相同的进程。 |
-n | 只选择最新的匹配进程。 |
-o | 只选择最旧的匹配进程。 |
-P pid | 只匹配指定父进程ID的进程。 |
-G sid | 只匹配指定会话ID的进程。 |
-v | 反转匹配,即选择不匹配指定条件的进程。 |
--ns pid | 匹配与指定进程相同的名字空间的进程。 |
--nslist ns,... | 指定要与给定进程进行比较的名字空间列表。 |
5、使用示例
1)发送一个特定信号到进程
想要发送一个 HUP 信号到所有名为 "nginx" 的进程:
pkill -HUP nginx
2)列出所有可用的信号
pkill -l
3)按用户匹配进程并结束它们
杀死所有由用户 "levi" 运行的 "node" 进程:
pkill -u levi node
4)按终端匹配进程
结束所有在 pts/1 终端上运行的 "bash" 进程:
pkill -t pts/1 bash
5)精确匹配进程名
如果你只想杀死名为 "python3" 的进程,而不是 "python3.7" 或其他变种:
pkill -x python3
6)选择并结束最新的进程
如果你运行了多个 "firefox" 实例并只想杀死最新的一个:
pkill -n firefox
7)选择并结束最旧的进程
杀死运行时间最长的 "chrome" 进程:
pkill -o chrome
8)按父进程ID匹配并结束进程
杀死所有其父进程ID为 1234 的进程:
pkill -P 1234
9)反转匹配
结束所有不是 "systemd" 的进程 (谨慎使用,可能会结束很多关键进程):
pkill -v systemd
10)匹配特定的名字空间
杀死与进程ID 5678 在相同名字空间的所有进程:
pkill --ns 5678