解決策 1:
sleep
のドキュメント coreutils からのコマンド 言います:
sleep の歴史的な実装では、number は整数である必要があり、サフィックスのない単一の引数のみを受け入れました。しかし、GNU sleep は、任意の浮動小数点数を受け入れます。浮動小数点を参照してください。
したがって、 sleep 0.1
を使用できます 、 sleep 1.0e-1
および同様の議論。
解決策 2:
Bash には、小数秒をサポートする「読み込み可能な」スリープがあり、外部コマンドのオーバーヘッドを排除します:
$ cd bash-3.2.48/examples/loadables
$ make sleep && mv sleep sleep.so
$ enable -f sleep.so sleep
次に:
$ which sleep
/usr/bin/sleep
$ builtin sleep
sleep: usage: sleep seconds[.fraction]
$ time (for f in `seq 1 10`; do builtin sleep 0.1; done)
real 0m1.000s
user 0m0.004s
sys 0m0.004s
欠点は、ローダブルが bash
で提供されない可能性があることです バイナリなので、示されているように自分でコンパイルする必要があります (ただし、Solaris では必ずしも上記のように単純であるとは限りません)。
bash-4.4
現在 (2016 年 9 月) すべてのローダブルは、それをサポートするプラットフォーム上でデフォルトでビルドおよびインストールされるようになりましたが、それらは個別の共有オブジェクト ファイルとしてビルドされ、.so
サフィックス。お使いのディストリビューション/OS がクリエイティブなことをしていない限り (残念ながら RHEL/CentOS 8 ビルド bash-4.4
読み込み可能な拡張機能を意図的に使用する 削除されました)、代わりにできるはずです:
[ -z "$BASH_LOADABLES_PATH" ] &&
BASH_LOADABLES_PATH=$(pkg-config bash --variable=loadablesdir 2>/dev/null)
enable -f sleep sleep
(man ページは BASH_LOADABLES_PATH
を意味します は自動的に設定されますが、これは 4.4.12 の公式ディストリビューションには当てはまりません。正しく設定されていれば、必要なのは enable -f filename commandname
だけです 必要に応じて)
それが適切でない場合、次の最も簡単な方法は sleep
をビルドまたは取得することです GNU coreutils から、これは必要な機能をサポートします。 POSIX sleep
コマンドは最小限であり、古い Solaris バージョンはそれだけを実装していました。 Solaris 11 sleep
する 小数秒をサポートします。
最後の手段として perl
を使用できます (またはあなたが手にしなければならないその他のスクリプト) には、インタープリターの初期化が意図したスリープ時間に匹敵する可能性があるという注意事項があります:
$ perl -e "select(undef,undef,undef,0.1);"
$ echo "after 100" | tclsh
解決策 3:
Sleep は 10 進数を受け入れるので、次のように分解できます:
1/2 秒
sleep 0.5
1/100 秒
sleep 0.01
したがって、1 ミリ秒は必要です
sleep 0.001
解決策 4:
これを試して精度を判断してください:
time sleep 0.5 # 500 milliseconds (1/2 of a second)
time sleep 0.001 # 1 millisecond (1/1000 of a second)
time sleep 1.0 # 1 second (1000 milliseconds)
mr.spuratic のソリューションと coles のソリューションの組み合わせ。
解決策 5:
単純に usleep
を使用できます .パラメータとしてマイクロ秒 (=1e-6 秒) かかるので、1 ミリ秒スリープするには次のように入力します:
usleep 1000