襄阳市网站建设_网站建设公司_支付系统_seo优化
2026/1/22 13:08:57 网站建设 项目流程

Shell Daily 2026-01-22: 进程猎手 (Pgrep & Pkill)

你是否还在用这种“祖传代码”来处理进程:ps aux | grep "java" | grep -v "grep" | awk '{print $2}' | xargs kill

这种“管道体操”不仅写起来费劲,而且极其脆弱。如果不小心匹配到了同名的其他进程(比如另一个重要的 Java 服务),后果不堪设想。Linux 早就为我们准备了专门的进程检索与信号发送工具pgreppkill

怎么用

它们能够直接通过名字用户启动参数来定位进程,无需手动解析 PID。

  • pgrep [pattern]:查找并打印 PID。推荐常备 -a 参数(显示完整命令)以确认匹配无误。
  • pkill [pattern]:找到并发送信号(默认 SIGTERM)。
  • 关键参数 -f**:默认只匹配进程名(如 java)。加上 -f 后会匹配完整命令行**(如 java -jar app.jar),这是区分同一类服务的关键。
  • 兼容性Linux (procps-ng) 标配。macOS 原生支持。

适用场景

  • 服务重载:没有 PID 文件时,向指定服务发送 HUP 信号重载配置。
  • 精准清理:只停止运行特定 Python 脚本的进程,而不影响系统其他 Python 任务。

示例 1:先确认,再动手 (Best Practice)

假设你要停止 data_worker.py切记:先用 pgrep 确认匹配范围,避免误杀。

# 1. 错误做法:只搜 python 会匹配到系统工具
# 2. 正确做法:使用 -f 匹配参数,-a 眼见为实
$ pgrep -af "data_worker.py"
4055 python3 /opt/scripts/data_worker.py
4056 python3 /opt/scripts/data_worker_monitor.py

示例 2:发送信号

确认无误后,使用 pkill 执行操作。不需要管道,不需要 xargs。

# 场景:修改了 nginx.conf,需要热加载
# -HUP: 发送 Hang Up 信号 (相当于 reload)
$ sudo pkill -HUP nginx# 场景:踢出非法用户 guest 的所有登录会话
# -u: 严格限制用户范围
$ sudo pkill -u guest sshd

(注:把 pgrep -af 练成肌肉记忆,它是你手动清理进程时最可靠的安全网。)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询