apache重载(graceful)时主进程pid不变、worker进程pid分批更替,需结合ps查看lstart时间戳分布及error_log中“caught sigusr1”日志确认平滑过渡是否生效。
apache 重载(apachectl graceful 或 systemctl reload httpd)不是杀掉主进程再重启,而是让主进程发信号给 worker 进程逐步退出、新 worker 按需拉起。所以不能只看“有没有进程”,而要看 pid 变化节奏和进程启动时间是否分批演进。
观察主进程与子进程的 PID 生命周期
执行两次命令,间隔 2–5 秒,对比输出:
- 主进程(PPID = 1,或无父进程)PID 通常不变——这是 graceful 的标志;若主 PID 变了,说明实际执行的是
restart而非 reload - worker 进程(PPID = 主进程 PID)的 PID 应持续变化:旧 worker 陆续退出(PID 消失),新 PID 陆续出现
- 用
ps -eo pid,ppid,lstart,comm --sort=-lstart | grep httpd | head -10查看最近启动的 10 个 httpd 进程,重点关注lstart字段(完整启动时间)
识别“正在平滑过渡中”的典型时间特征
刚执行 graceful 后,你会看到两类时间戳并存:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 一批老 worker 还在运行,
lstart是几小时甚至几天前的时间 - 一批新 worker 已启动,
lstart集中在当前秒级(如Mon Sep 15 14:22:03 2026),且数量随时间缓慢增加 - 当所有 worker 的
lstart都落在同一秒或前后 2 秒内,说明旧进程已全部退出,新配置已全面接管
结合 error_log 验证信号是否真正送达
仅靠 ps 看 PID 不够,因为进程存在 ≠ graceful 生效。必须交叉验证:
- 查
/var/log/httpd/error_log(路径依配置而定),搜索关键词graceful或restarting - 正常 graceful 会记录类似:
[mpm_prefork:notice] [pid 1234] AH00169: caught SIGUSR1, restarting - 如果 ps 显示进程全在,但 error_log 没有这条日志 → 很可能信号未被主进程接收(例如权限问题、主进程卡死、或误用了
systemctl restart)
避免只依赖 grep httpd 带来的干扰
ps -ef | grep httpd 本身会额外产生一条匹配进程(grep 自身),容易误判活跃数。更稳妥做法是:
- 用
pgrep httpd | wc -l统计真实 httpd 进程数,对比 reload 前后变化趋势 - 加
-o pid,ppid,etime,comm查看进程已运行秒数(etime),比单纯看 PID 更直观反映“新旧程度” - 若所有 worker 的
etime都 > 3600(1 小时),基本可判定 graceful 未触发成功










