pkill命令的使用

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 可以发送不同的信号来终止进程。常见的信号包括:

信号编号信号名说明
1SIGHUP挂起信号,通常用于重新加载配置。
9SIGKILL强制终止信号,立即杀死进程,不可被捕获或忽略。
15SIGTERM优雅终止信号,允许进程清理资源后退出(默认信号)。
2SIGINT中断信号(通常由 Ctrl+C 触发)。
3SIGQUIT退出信号(通常由 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 使用

pgreppkill 的“查找”版本,可以用来检查哪些进程会被 pkill 杀死。例如:

pgrep -f "proxy --from="

这会列出所有匹配的进程 ID,方便确认后再使用 pkill


6. 注意事项

  1. 权限pkill 需要足够的权限才能杀死其他用户的进程。普通用户只能杀死自己的进程,而 root 用户可以杀死所有进程。
  2. 误杀风险pkill 会根据模式匹配进程,如果模式过于宽泛,可能会误杀不相关的进程。建议先用 pgrep 测试匹配结果。
  3. 信号默认值:如果不指定信号,pkill 默认发送 SIGTERM(15),这是一种优雅终止进程的方式。如果进程没有响应,可以使用 SIGKILL(9)强制终止。

7. 总结

pkill 是一个强大的工具,特别适合批量终止进程。通过结合选项和模式匹配,可以精确控制需要杀死的进程范围。使用时需谨慎,避免误杀重要进程。

发表回复