ホームページ > 運用・保守 > Linuxの運用と保守 > Linux のスリープはスレッドを遅延させることができますか?

Linux のスリープはスレッドを遅延させることができますか?

青灯夜游
リリース: 2023-03-16 11:02:24
オリジナル
2341 人が閲覧しました

睡眠が遅れる可能性があります。 Linux の sleep コマンドを使用すると、現在のアクションを一定期間遅らせることができます。構文は「sleep [--help] [--version]number[smhd]」です。デフォルトでは、sleep コマンドはしばらく遅延します。遅延を秒、分、時間、または日で指定する単位。

Linux のスリープはスレッドを遅延させることができますか?

#このチュートリアルの動作環境: linux7.3 システム、Dell G3 コンピューター。

スリープによりスレッドが遅延する可能性があります。

Linux sleep コマンドの概要

Linux sleep コマンドを使用すると、現在のアクションを一定期間遅らせることができます。

使用権限: すべてのユーザー。

#構文

sleep [--help] [--version] number[smhd]
ログイン後にコピー

パラメータの説明:

    ##--help: 補助メッセージの表示
  • #--version: バージョン番号の表示
  • number: 時間の長さ。その後に s、m、h、または d
  • を続けることができます。s は秒、m は m です。 is 分、h は時間、d は日数です

  • 1. Linux コマンドの実行を遅延します

デフォルトでは、sleep コマンドは数秒待ちます。これを理解するために、sleep コマンドを使用する前後の現在時刻を出力してみましょう。たとえば、次のコマンドは現在の時刻を出力し、再度時刻を出力するまで 5 秒待機します。

$ date '+%r'; sleep 5; date '+%r'
ログイン後にコピー

この例では、セミコロン (;) を使用して各コマンドを区切る必要があります。

Linux のスリープはスレッドを遅延させることができますか?#2. N 分間待機するコマンドを発行します

通常、sleep コマンドではサフィックスを使用して次のことを行うことができます。時間単位を指定します。これは、次のサフィックスを使用して sleep コマンドで表現できます:

s – 時間単位を秒単位で指定します。
  • m – 時間単位を分単位で指定します。
  • h – 時間単位を時間単位で指定します。
  • d – 時間単位を日単位で指定します。
  • したがって、ここでは 'm' 接尾辞を使用して 1 分間スリープします:
  • $ date '+%r'; sleep 1m; date '+%r'
    ログイン後にコピー

3. コマンドを X 分と秒間スリープさせます。

実際には、sleep コマンドで複数のサフィックスを使用することもできます。この場合、期間はすべての値を加算することによって計算されます。

これを理解するために、以下では 1 分 20 秒間スリープするコマンドを使用します。コマンドは次のとおりです:

$ date '+%r'; sleep 1m 20s; date '+%r'
ログイン後にコピー

上の例では、2 つの異なるサフィックスが使用されています。 。ただし、同じ接尾辞を使用することもできます。たとえば、2s と 3s のサフィックスを使用して 5 秒間スリープすることができます。コマンドは次のとおりです:

$ date '+%r'; sleep 2s 3s; date '+%r'
ログイン後にコピー

4. sleep コマンドで浮動小数点数を使用します

#さらに、sleep コマンドは浮動小数点数も入力として受け入れるので、このメソッドを使用して 1 秒未満スリープすることができます。たとえば、0.5 秒の値を使用して 0.5 秒スリープできます。

$ date '+%r'; sleep 0.5s; date '+%r'
ログイン後にコピー
上記の出力では、date コマンドが秒の時間単位に同じ値を表示していることがわかります。

さらに、他の接尾辞が付いた浮動小数点値も使用できます。たとえば、30 秒間スリープするには 0.5m の値を使用できます:

$ date '+%r'; sleep 0.5m; date '+%r'
ログイン後にコピー

5. sleep コマンドを使用して目覚まし時計をシミュレートします

前の例では、sleep コマンドを使用して目覚まし時計をシミュレートします。例では、主に sleep コマンドを使用して次のコマンドの実行を遅らせる方法を紹介しました。あるいは、このトリックを使用して目覚まし時計をシミュレートすることもできます。 それでは、次に次のコマンドを使用して、5 秒後にアラームを設定します。

$ sleep 5; cvlc alarm.mp3
ログイン後にコピー

上記のコマンドは、5 秒待った後、VLC メディア プレーヤーを使用してalarm.mp3 ファイルを開きます。他の Linux コマンドと同様に、Ctrl C キーの組み合わせを使用して VLC メディア プレーヤーを停止できます。

sleep コマンドの使用例

最初にプログラムを 30 秒間スリープさせます

文字通りところで、sleep コマンドの機能はもうおわかりいただけたかと思います。簡単に言うと、スリープとはプログラムを少し休ませてから動作を継続することです (休むことは動作を良くするためです...)。 シェル プログラムに 30 秒間仮眠させます:

#睡眠30秒
[roc@roclinux ~]$ sleep 30s
 
#让date命令来监督, 看看是不是真的睡了30秒
[roc@roclinux ~]$ date;sleep 30s; date
Thu Feb 25 08:25:17 CST 2016
Thu Feb 25 08:25:47 CST 2016
ログイン後にコピー

睡眠時間の個人設定

sleep コマンドはシンプルですが、個人用にカスタマイズできます。カスタマイズしてもっと楽しくしましょう。 一般的に、sleep コマンドに続く値は時間を表すために使用されます。時間には単位が必要です。単位を指定しない場合、デフォルトの単位は何になりますか?

[roc@roclinux ~]$ date; sleep 1; date
Thu Feb 25 09:55:47 CST 2016
Thu Feb 25 09:55:48 CST 2016
ログイン後にコピー

この例から、デフォルトの単位は秒であり、指定された単位と同じ効果があります。

秒がある場合は、分と時間もあるはずです。では、睡眠ではこれらの単位はどのように表されるのでしょうか?

s: 秒を示します

  • m: 分を示します

  • h: 時間を示します

  • d: 日を意味します

  • たとえば、シェル プログラムを 1 分間スリープさせたい場合、どうすればよいでしょうか?

    [roc@roclinux ~]$ date; sleep 1m; date
    Thu Feb 25 10:00:43 CST 2016
    Thu Feb 25 10:01:43 CST 2016
    ログイン後にコピー
  • シェル プログラムを 1 時間スリープさせたい場合は、単位を h に変更するだけです。シェル プログラムを 1 分 40 秒間スリープさせたい場合はどうすればよいでしょうか? 1 分 = 60 秒、1 分 40 秒 = 100 秒、コンピューターを直接 100 秒間スリープ状態にすることができます。
[roc@roclinux ~]$ date; sleep 100; date
Thu Feb 25 10:12:28 CST 2016
Thu Feb 25 10:14:08 CST 2016
ログイン後にコピー

実は、睡眠はあなたが思っているよりも重要です。次のように直接入力できます:

#注意: 分钟和秒之间一定要有空格哦
[roc@roclinux ~]$ date; sleep 1m 40s; date
Thu Feb 25 10:17:04 CST 2016
Thu Feb 25 10:18:44 CST 2016
ログイン後にコピー

这种方法简单、直接,节省了我们不少的思考时间。

在 sleep 中最大的单位是 d(天),如果想表示更长的时间,比如周、月、年的话,那么你只能把它们转换成天来表示了。

# 这样,  Shell程序乖乖地沉睡 "一周2小时5分4秒"
[roc@roclinux ~]$ date; sleep 7d 2h 5m 4s; date
Thu Feb 25 10:17:04 CST 2016
Thu Feb 25 10:18:44 CST 2016
ログイン後にコピー

毫秒级睡眠时间可不可以

sleep 命令的默认时间单位是秒,但对于高速运行的程序来说,“秒”还是显得太长了。那 sleep 能不能实现毫秒级的睡眠呢?答案是可以的,例如,我们让 Shell 程序睡眠 3 毫秒:

[roc@roclinux ~]$ time sleep 0.003
 
real    0m0.004s
user    0m0.000s
sys 0m0.001s
ログイン後にコピー

time 可以通过浮点数的方式实现毫秒级的睡眠,但这里有一点需要注意,即睡眠时间的精度。sleep 命令只能保证 10ms 级别的精度控制,对于小于 10ms 的睡眠时间是存在误差的。实际应用中,如果你对时间精度要求特别高的话,sleep 或许不是一个正确的选择,还是请考虑其他方法吧。

sleep 的过程中 CPU 是否被占用

默认情况下,sleep 的进程是不占用 CPU 时间的,我们可以通过实验来说明这个问题:

[roc@roclinux ~]$ \time sleep 1
0.00user 0.00system 0:01.00elapsed 0%CPU (0avgtext+0avgdata 2560maxresident)k
0inputs+0outputs (0major+200minor)pagefaults 0swaps
ログイン後にコピー

看到了吗?0.00user、0.00system、0%CPU 这三个输出项都表明 sleep 是不会耗费 CPU 的计算资源的。

注意:上面使用了\time命令,它指代的是 /usr/bin/time,而不是 Shell 内置的 time 命令。/usr/bin/time 命令可以显示更多的信息,而 Shell 内置的命令做不到这一点。

相关推荐:《Linux视频教程

以上がLinux のスリープはスレッドを遅延させることができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート