首页/系统/Linux 运维命令速查/pidof 查找进程 PID
进程与作业69 条

pidof 查找进程 PID

按可执行文件名精确查询 PID:pidof nginx;脚本里判断「进程在不在」最简洁的一条命令。

Linux 运维命令速查系统更新于 2026-10-13

pidof 是什么

pidof 按可执行文件名精确查找进程 PID,输出一行或空格分隔的多个 PID。它来自 sysvinit 工具集,语法比 pgrep 更直白:pidof nginx 就能拿到全部同名进程号,脚本里判断「服务在不在」最省事。要注意它匹配的是可执行文件名,而不是完整命令行,这一点决定了它能不能查到你的目标进程。

基本信息

所属sysvinit-utils(部分系统由 procps-ng 提供兼容实现)
语法pidof [-s] [-x] 程序名
关键选项-s 只返回第一个 PID,-x 让脚本匹配脚本自身
对比工具pgrep 支持正则、按用户与完整命令行匹配

典型使用场景

  • 脚本里快速判断某个服务是否在运行
  • 拿到 PID 后发信号:重载配置、触发日志轮转
  • 巡检时统计同一程序起了几个实例
  • 停止服务前确认进程是否还存在
  • 重启前先清理残留进程,避免端口占用
  • 定时任务里做占用检查,防止重复启动

常用示例

常用示例
pidof sshd                        # 列出所有 sshd 进程 PID
pidof -s nginx                    # 只取第一个 PID
[ -n "$(pidof nginx)" ] && echo running || echo stopped   # 最简运行判断
kill -USR1 $(pidof nginx)         # 给全部实例发信号(常用于重开日志)
pgrep -f 'python app.py'          # 按完整命令行匹配脚本类进程
pgrep -u deploy -f '/opt/app/bin/worker'   # 按用户与命令行精确指定
ps -o pid,ppid,stat,cmd -p $(pidof -s nginx)   # 拿到 PID 后看状态

pidof 与 pgrep 对照

需求pidofpgrep
按程序名查询pidof nginx 直接可用pgrep nginx 等价
按完整命令行不支持pgrep -f 指定整行
按运行用户筛选不支持pgrep -u 指定用户
只取一个结果-s 选项pgrep -o 或配合 head
匹配脚本进程默认匹配解释器名-f 直接匹配整行
pidof 匹配的是可执行文件名:以解释器启动的脚本(python app.py、bash job.sh)用程序名查不到,这类进程必须用 pgrep -f 按命令行匹配。
容器使用独立的 PID 命名空间:容器内看到的小 PID 与宿主机视角完全不同,跨命名空间核对 PID 要借助 nsenter 或容器运行时提供的查看方式,否则容易杀错进程。
pidof 返回的多个 PID 是空格分隔的一整行,直接写进 kill 会作用到全部实例;只想操作其中一个时用 -s 或先做过滤。

易错点

  • 用 pidof 查解释器启动的脚本:永远查不到,误判服务已停止,应改用 pgrep -f
  • 把 pidof 返回的多个 PID 不加区分地 kill:全部实例一起停,可能中断正在处理的请求
  • 在容器里按宿主机 PID 核对进程:命名空间不同对不上号,还会杀错目标
  • 只靠 pidof 判断服务健康:进程还在但已经卡死时判据失效,应结合端口或接口探测

数据来源与参考

  • man 8 pidof(sysvinit-utils 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌