pkill命令的使用
pkill
是一个强大的命令行工具,用于根据进程名称或其他属性杀死进程。它是 pgrep
的配套工具,pgrep
用于查找进程,而 pkill
用于杀死进程。pkill
支持通过进程名、命令行、用户等多种条件来匹配进程,并可以发送指定的信号来终止进程。
以下是 pkill
命令的 完整且详细 的用法介绍:
1. 基本语法
pkill [选项] <模式>
- 模式:可以是进程名、命令行或正则表达式。
- 选项:用于指定匹配条件或行为。
2. 常用选项
选项 | 说明 |
---|---|
-f | 匹配完整的命令行(而不仅仅是进程名)。例如,pkill -f "proxy --from=" 。 |
-u <用户名> | 只匹配属于指定用户的进程。 |
-P <父进程ID> | 只匹配指定父进程的子进程。 |
-x | 精确匹配进程名(而不是部分匹配)。 |
-n | 只杀死最新的(最近启动的)匹配进程。 |
-o | 只杀死最旧的(最早启动的)匹配进程。 |
-SIGNAL | 发送指定的信号(如 -9 表示 SIGKILL ,-15 表示 SIGTERM )。 |
-v | 反向匹配,杀死不匹配的进程。 |
-c | 统计匹配的进程数,但不杀死进程。 |
-g <进程组ID> | 只匹配指定进程组的进程。 |
-t <终端> | 只匹配指定终端(TTY)的进程。 |
-i | 忽略大小写(匹配时对大小写不敏感)。 |
3. 信号说明
pkill
可以发送不同的信号来终止进程。常见的信号包括:
信号编号 | 信号名 | 说明 |
---|---|---|
1 | SIGHUP | 挂起信号,通常用于重新加载配置。 |
9 | SIGKILL | 强制终止信号,立即杀死进程,不可被捕获或忽略。 |
15 | SIGTERM | 优雅终止信号,允许进程清理资源后退出(默认信号)。 |
2 | SIGINT | 中断信号(通常由 Ctrl+C 触发)。 |
3 | SIGQUIT | 退出信号(通常由 Ctrl+\ 触发)。 |
4. 示例用法
4.1 根据进程名杀死进程
杀死所有名为 proxy
的进程(包含proxy的都算):
pkill proxy
4.2 根据完整命令行杀死进程
杀死命令行中包含 proxy --from=
的进程:
pkill -f "proxy --from="
4.3 杀死指定用户的进程
杀死用户 john
的所有 proxy
进程:
pkill -u john proxy
4.4 精确匹配进程名
只杀死进程名完全匹配 proxy
的进程(精确匹配,不会匹配 proxy-server
等):
pkill -x proxy
4.5 杀死最新的或最旧的进程
杀死最新的 proxy
进程:
pkill -n proxy
杀死最旧的 proxy
进程:
pkill -o proxy
4.6 发送特定信号
强制杀死所有 proxy
进程(发送 SIGKILL
信号):
pkill -9 proxy
优雅终止所有 proxy
进程(发送 SIGTERM
信号):
pkill -15 proxy
4.7 统计匹配的进程数
统计有多少 proxy
进程正在运行,但不杀死它们:
pkill -c proxy
4.8 反向匹配
杀死所有不是 proxy
的进程:
pkill -v proxy
4.9 匹配指定终端(TTY)的进程
杀死终端 pts/0
上的所有 proxy
进程:
pkill -t pts/0 proxy
4.10 匹配指定进程组的进程
杀死进程组 ID 为 1234
的所有进程:
pkill -g 1234
5. 结合 pgrep
使用
pgrep
是 pkill
的“查找”版本,可以用来检查哪些进程会被 pkill
杀死。例如:
pgrep -f "proxy --from="
这会列出所有匹配的进程 ID,方便确认后再使用 pkill
。
6. 注意事项
- 权限:
pkill
需要足够的权限才能杀死其他用户的进程。普通用户只能杀死自己的进程,而root
用户可以杀死所有进程。 - 误杀风险:
pkill
会根据模式匹配进程,如果模式过于宽泛,可能会误杀不相关的进程。建议先用pgrep
测试匹配结果。 - 信号默认值:如果不指定信号,
pkill
默认发送SIGTERM
(15),这是一种优雅终止进程的方式。如果进程没有响应,可以使用SIGKILL
(9)强制终止。
7. 总结
pkill
是一个强大的工具,特别适合批量终止进程。通过结合选项和模式匹配,可以精确控制需要杀死的进程范围。使用时需谨慎,避免误杀重要进程。