【发布时间】:2017-07-10 10:12:13
【问题描述】:
我正在尝试以毫秒为单位实现 5 分钟(300 秒)的计时器,但睡眠 0.001 需要超过 5 分钟。
如果我将 if [ $t -ge 300000 ] 更改为 if [ $t -ge 30000 ],它将在 3 分钟内完成。
df1, df2 分别保存 t1 和 t2 时刻的磁盘使用率值。
t=0
x=0
df1
while [ $x -lt 10000 ]
sleep 0.001
df2
x=(( df1-df2 ))
if [ $t -ge 300000 ]
then
t=0
df1
else
(( t++ ))
fi
done
dosomething
我想每 0.001 秒测试一次 $x。 df1 和 df2 应该每 300 秒保存一次新值。我怎样才能做到这一点?
【问题讨论】:
-
Zaheer:不清楚你的完整需求,为什么不直接写sleep 300(for 5 mins)呢?
-
为什么不只是
sleep 300?如果您确实需要以如此快的速度进行迭代(即非常短的睡眠间隔,并且可能解释了持续时间的漂移),您应该将比较基于读取当前时间并与之前的时间进行比较,而不是睡眠预定的持续时间并增加一个计数器。为此,您可以使用date +%s根据系统时钟获取以秒为单位的递增计数器。 -
我需要监控每 t(0.001) 秒的磁盘使用情况,如果在 300000 秒内有任何巨大差异($x),它应该采取一些措施。如果我使用 sleep 300,脚本将处于空闲状态,并且在此期间不会监控 df。我想迅速采取行动,因此是 0.001。
-
由于你的循环条件是
[ $x -lt 10000 ],如果不知道df1和df2的实际值是什么,就很难判断循环何时结束。我能提供的最好建议是sleep 0.001可能不太准确。 -
可能值得考虑创建一个小型 C 程序来进行更精确的计算。看到这个帖子的答案stackoverflow.com/questions/10192903/time-in-milliseconds