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

树莓派环境下如何延迟执行第二个命令且不中断首个命令?

优化你的树莓派基准测试脚本

看起来你想在sysbench预热5秒后启动系统监控,同时确保监控和测试周期对齐——这个需求很合理,但现有脚本存在几个容易踩的坑,我帮你调整下:

现有脚本的问题

  • iostat和mpstat默认会持续输出直到手动终止,不会自动跟着sysbench结束,会导致后续测试轮次的监控数据混乱。
  • 后台进程没有同步:sysbench结束后监控还会继续跑,或者监控还没采集完sysbench就结束了,时间线不匹配。
  • 所有测试结果直接追加到同一个文件,后续很难区分不同max-prime对应的监控数据。

优化后的脚本

#!/bin/bash

# 创建专属目录存放结果,避免文件混乱
OUTPUT_DIR="raspberrypi_benchmarks"
mkdir -p "$OUTPUT_DIR"

for x in 16000 32000 64000 128000
do
    echo "=== Starting benchmark with max-prime = $x ==="
    # 为每个测试生成独立的输出文件,方便后续分析
    SYSBENCH_LOG="${OUTPUT_DIR}/sysbench_cpu_${x}.log"
    MPSTAT_LOG="${OUTPUT_DIR}/mpstat_${x}.log"
    IOSTAT_LOG="${OUTPUT_DIR}/iostat_${x}.log"

    # 启动sysbench并记录进程ID,方便后续监控生命周期
    sysbench --test=cpu --cpu-max-prime=$x --num-threads=4 run >> "$SYSBENCH_LOG" &
    SYSBENCH_PID=$!

    # 等待5秒预热时间
    sleep 5s

    # 启动mpstat,每秒采集一次CPU统计,直到sysbench结束
    mpstat 1 >> "$MPSTAT_LOG" &
    MPSTAT_PID=$!

    # 启动iostat,每秒采集一次磁盘统计(-x 可输出扩展信息,按需开启)
    # iostat -x 1 >> "$IOSTAT_LOG" &
    iostat 1 >> "$IOSTAT_LOG" &
    IOSTAT_PID=$!

    # 等待sysbench测试完成
    wait $SYSBENCH_PID

    # 测试结束后终止监控进程,避免资源浪费
    kill $MPSTAT_PID $IOSTAT_PID
    # 忽略监控进程退出的报错(kill后进程已结束,wait会返回非0状态)
    wait $MPSTAT_PID $IOSTAT_PID 2>/dev/null

    echo "=== Benchmark with max-prime = $x completed ==="
done

echo "All benchmarks finished! Check results in: ${OUTPUT_DIR}/"

关键调整说明

  1. 独立输出文件:每个测试的sysbench、mpstat、iostat结果都存在单独文件里,用max-prime值命名,后续分析数据不用再手动拆分。
  2. 进程生命周期绑定:通过记录sysbench的PID,确保监控工具只在sysbench运行期间采集数据,测试结束后自动停止。
  3. 定时采集:给mpstat和iostat加上1参数,每秒采集一次数据,相比默认的单次输出,能得到更细致的系统负载变化曲线。
  4. 兼容小提示:如果你的sysbench是较新版本,--test=cpu可能已被简化为cpu,可以改成sysbench cpu --cpu-max-prime=$x --num-threads=4 run。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:28:08