このエントリーをはてなブックマークに追加

shellスクリプトの中で非常に短い時間だけスリープさせるような場面がたまにあります。1/10秒とか1/100秒とか。 micro秒単位でsleepさせるコマンドとしてusleepというのがあります。

$ usleep 1 => 1マイクロ秒
$ usleep 1000 => 1ミリ秒
$ usleep 1000000 => 1秒

となります。ためしに0.1秒(=100000マイクロ秒)で試してみます。

$ date '+%T %N'; usleep 100000; date '+%T %N'; usleep 100000; date '+%T %N'; usleep 100000; date '+%T %N'
21:59:31 348140456
21:59:31 456425794
21:59:31 565385018
21:59:31 673408328

ちなみに普通のsleepでも0.1秒などの指定ができます。

$ date '+%T %N'; sleep 0.1; date '+%T %N'; sleep 0.1; date '+%T %N'; sleep 0.1; date '+%T %N'; sleep 0.1;
22:01:48 832841838
22:01:48 941709364
22:01:49 049713058
22:01:49 158719776

ただし、ご覧のとおり、shellの場合、コマンドのオーバーヘッドがあるので、それほど正確にsleepしたり次の処理を実行したりはできません。(特に標準出力しているのも遅れる原因だとおもいますが)




記事一覧へ