GNU/Linux >> Linux の 問題 >  >> Linux

bash または ksh で 1 ミリ秒間スリープする方法

解決策 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

Linux
  1. Bashスクリプトをデバッグする方法は?

  2. コマンドエイリアスのBash補完を取得する方法は?

  3. 特定のコマンドにカスタムオートコンプリートを指定するにはどうすればよいですか?

  1. 単一のコマンドに対してBashでエイリアスを無効にする方法は??

  2. バッシュを検出する方法>=4.0?

  3. bash で複数のバックグラウンド コマンドを 1 行で実行するにはどうすればよいですか?

  1. Git for Windows で Git Bash のディレクトリを変更するにはどうすればよいですか?

  2. vim で .bash_aliases の構文強調表示を有効にするにはどうすればよいですか?

  3. *nix でポイント コマンド `.` のヘルプを見つけるにはどうすればよいですか?