我正在尝试执行以下操作(在使用Raspbian OS的Raspberry Pi 3上):
sysbench
)iostat
和mpstat
)经过一段时间的延迟,比如5s,作为预热区间所以我制作了以下基本脚本:
#!/bin/bash
for x in 16000 32000 64000 128000
do
echo "max-prime = $x"
(sysbench --test=cpu --cpu-max-prime=$x --num-threads=4 run >> results.out) & (sleep 5s && mpstat >> mpstat.out & iostat >> iostat.out)
done
我尝试了上面第5行的更多变体,但sysbench
没有正确执行(我认为是因为sleep
?)。用results.out
写的输出只是这个,因为循环重复了4次:
sysbench 0.4.12: multi-threaded system evaluation benchmark
Running the test with following options:
Number of threads: 4
Doing CPU performance benchmark
Threads started!
如何执行sysbench
并在5秒后运行监控工具,而不会影响sysbench
?
答案 0 :(得分:2)
如果将命令放在不同的行上,你将会更容易。
for x in 16000 32000 64000 128000
do
echo "num of threads = $x"
sysbench --test=cpu --cpu-max-prime=$x --num-threads=4 run >> results.out &
sleep 5s
mpstat >> mpstat.out
iostat >> iostat.out
done
您需要等到基准测试结束才能进入下一个循环。我建议在循环结束时放置wait
或kill %%
来等待或停止它。
答案 1 :(得分:1)
在这里尝试一对额外的括号:
... & (sleep 5s && (mpstat >> mpstat.out & iostat >> iostat.out))
^ ^
答案 2 :(得分:0)
您可以将;
命令分隔符与&
混合以将进程置于后台。
foo & sleep 5; bar &
在您的情况下,您希望循环执行此操作。如果您想在继续循环的下一次迭代之前等待foo
完成,请使用wait
。
for ... ; do
foo & sleep 5; bar
wait
done