You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让pgrep仅识别系统级shutdown命令而非含该词的其他进程?

解决方案
  • 方案1:精确匹配进程名(适用自定义脚本文件名不等于shutdown的场景)
    pgrep默认对进程名做子串匹配,只要进程名包含shutdown字样就会命中。添加-x参数开启精确匹配规则,仅会返回进程名完全等于shutdown的进程:
    pgrep -x shutdown
    这种方案实现最简单,无需调整后续业务逻辑。

  • 方案2:匹配系统shutdown绝对路径(全场景适用,含自定义脚本也命名为shutdown的情况)
    如果你的自定义脚本本身文件名就是shutdown,方案1仍会误判,此时可以匹配系统shutdown的固定绝对路径。绝大多数Linux发行版的系统shutdown都存放在/sbin/shutdown或/usr/sbin/shutdown路径下,使用-f参数匹配完整命令行,结合正则锚定开头即可,完全不受后面动态广播参数的影响:
    pgrep -f '^/sbin/shutdown\b'
    如果你的发行版shutdown在/usr/sbin下,替换为对应路径即可:
    pgrep -f '^/usr/sbin/shutdown\b'

  • 补充校验方案(可选,100%排除误判)
    如果要彻底避免所有异常情况,可以匹配到pid后校验进程对应的可执行文件路径:

for pid in $(pgrep -x shutdown); do
  # 校验进程可执行文件是否为系统级shutdown
  if [[ $(readlink -f /proc/"$pid"/exe) =~ ^(/usr)?/sbin/shutdown$ ]]; then
    # 匹配成功后的业务逻辑
    echo "检测到系统shutdown进程,PID:$pid"
  fi
done

内容的提问来源于stack exchange,提问作者NewtownGuy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 18:54:00