我有一台带有 OSX 系统的 MiniMac。
我的脚本是:
while true
do echo "Sleep 300 seconds = 5 minutes"
date
sleep 300
echo "end of sleep"
date
done
我希望它每 5 分钟重复一次;但有时当它执行“sleep 300”时,它会暂停几个小时,结果如下:
Sleep 300 seconds = 5 minutes
Fri Nov 8 15:52:49 CET 2013
end of sleep
Fri Nov 8 15:57:49 CET 2013
Sleep 300 seconds = 5 minutes
Fri Nov 8 15:57:49 CET 2013
end of sleep
Fri Nov 8 16:02:49 CET 2013
Sleep 300 seconds = 5 minutes
Fri Nov 8 16:02:49 CET 2013
end of sleep
Fri Nov 8 16:20:59 CET 2013
Sleep 300 seconds = 5 minutes
Fri Nov 8 16:20:59 CET 2013
Sleep 300 seconds = 5 minutes
Fri Nov 8 15:52:49 CET 2013
end of sleep
答案1
这听起来像是一个已经或正在将其良好级别设置为较低级别的过程。我会用以下命令确认这一点:
$ ps -eo "%p %y %x %c %n" | less
最后一列是良好值,在大多数情况下应为 0。如果它是 -20(最有利的调度)到 19(最有利的调度)之间的其他值,则某些东西正在将好值设置为这个不同的值。
例子
$ ps -eo "%p %y %x %c %n"| head -10
PID TTY TIME COMMAND NI
1 ? 00:00:01 init 0
2 ? 00:00:00 kthreadd 0
3 ? 00:00:02 ksoftirqd/0 0
4 ? 00:00:03 migration/0 -
5 ? 00:00:00 watchdog/0 -
15 ? 00:00:06 events/0 0
19 ? 00:00:00 cpuset 0
20 ? 00:00:00 khelper 0
21 ? 00:00:00 netns 0
其他事情
其他的东西@德罗伯特的指出。您的某些输出的时间出现奇怪的偏差。您的时钟可能有问题。
具体来说这个块:
Fri Nov 8 16:20:59 CET 2013 Sleep 300 seconds = 5 minutes Fri Nov 8 15:52:49 CET 2013 end of sleep
看来我们在这里回到了过去!
评论中的一些人表示您的系统可能已进入睡眠状态或可能已休眠。这个想法似乎是最好的线索,因为
sleep
通常使用很少的 CPU 时间,正如@Gilles 在我的答案评论中所指出的那样,因此通常不会受到更改的良好级别的影响。