OSXがインストールされたMiniMacがあります。
私のスクリプトは次のとおりです
while true
do echo "Sleep 300 seconds = 5 minutes"
date
sleep 300
echo "end of sleep"
date
done
5分ごとに繰り返したいのですが、時々「スリープ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
最後の列は適切な値であり、ほとんどの場合ゼロでなければなりません。 -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
@Gillesが私の答えに対するコメントで指摘したように、通常はCPU時間をほとんど使用しないため、通常は良いレベルの変更の影響を受けないため、このアイデアが最善の手がかりのようです。