如何让Linux top命令持续记录循环运行的process_a进程的top -H日志
解决循环进程的top -H日志记录问题
问题出在你执行top时,pgrep只会在启动top的瞬间获取一次process_a的PID列表,后续循环启动的新process_a进程PID不在这个初始列表里,所以top不会监控新进程。
下面是几种可行的解决方案:
方法1:用watch定期刷新PID列表
用watch命令每隔固定时间重新执行一次pgrep获取最新PID,再调用top输出单次结果:
# 每隔1秒刷新一次,输出到终端 watch -n 1 'top -b -H -n 1 -p $(pgrep -d, -f process_a)' # 如果要保存到日志文件,追加重定向即可 watch -n 1 'top -b -H -n 1 -p $(pgrep -d, -f process_a)' >> process_a_top.log
-n 1:设置刷新间隔为1秒,可根据需求调整数值(比如-n 5就是5秒)top的-n 1:让top只输出一次就退出,确保每次都能基于最新PID列表生成日志
方法2:编写自定义shell脚本(更灵活)
如果需要添加时间戳、处理无进程的情况,写个循环脚本更合适:
#!/bin/bash LOG_FILE="process_a_top.log" while true; do # 获取当前所有process_a的PID,逗号分隔 PIDS=$(pgrep -d, -f process_a) if [ -n "$PIDS" ]; then # 写入时间戳,方便日志定位 echo "=== 日志记录时间:$(date '+%Y-%m-%d %H:%M:%S') ===" >> "$LOG_FILE" # 执行top并追加到日志 top -b -H -n 1 -p "$PIDS" >> "$LOG_FILE" fi # 间隔1秒,可自行调整 sleep 1 done
使用时:
- 将脚本保存为
monitor_process_a.sh - 赋予执行权限:
chmod +x monitor_process_a.sh - 后台运行:
./monitor_process_a.sh &
注意事项
- 如果
process_a的进程名可能和其他进程混淆,建议把pgrep -f process_a改成pgrep -x process_a(精确匹配进程名),避免误抓无关进程 - 若不需要监控线程(
-H参数),可以去掉该选项,减少日志输出量
内容的提问来源于stack exchange,提问作者Karthik
相关产品推荐
相关产品推荐

