LoginSignup
1
1

More than 3 years have passed since last update.

sleepの歴史探訪

Last updated at Posted at 2020-07-11

ほほぉ・・・ちょっとソースコードを確認してみよう。もしかすると、こういう仕様になった経緯が見つかるかもしれない!

TL;DR (要約)

  • sleepコマンドは、従来秒数指定しかできなかった。(時分秒指定も無し)。
  • coreutilsで実装する段階で、時分秒指定と同時に、複数指定で合算でスリープするようになった(1992年)
  • 浮動小数指定もできるようになった(1999年)
  • BSD系では現状まだ、秒数指定のまま。

過去の歴史を手繰ってみる

まずは、wikipediaで経緯を確認してみよう。

そして、その実装はcoreutilsの中に書かれている、こちらか……

これのhistoryを手繰ってみると…… おおお!!!一番最初から、この仕様で実装されている!!

ということはcommit履歴に原因は書いてない…… とほほほ……

  for (i = 1; i < argc; i++)
    seconds += argdecode (argv[i]);

  sleep (seconds);

ではなぜ、この仕様になっているのだろうか?(推定)

どうやら「時分秒」指定をできるようにする → 合算した方が便利っぽい、と発想したものと推定される。

ポイントは「時分秒サポート」と「合算」は同時という事。

coreutil以前

sleepコマンドそのもの歴史はこちら。

ここにある通り、UNIX Likeなしステム時点で、sleepコマンドは存在していた。

2.8 BSD (1981年)

manにsleep 1の記載なし。

2.9.1 BSD (1983年)

項目 サポート
秒数指定 65535まで
単位指定
複数指定
少数指定

2.10 BSD (1985年)

項目 サポート
秒数指定 2,147,483,647 まで
単位指定
複数指定
少数指定

Sun OS 4.1.3 (1987年)

項目 サポート
秒数指定 2,147,483,647 まで
単位指定
複数指定
少数指定

Initial revision (1992年)

初期バージョンでは、単位指定と複数指定はできるが、少数指定はできなかった。

項目 サポート
秒数指定 UINT_MAX まで
単位指定
複数指定
少数指定

つまり、5時間30分のSleepをしたければ、sleep 5h 30mはサポートしていた。

GNU sh-utils 2.0 相当かな?

Rewrite to allow fractional seconds and to handle SIGCONT.(1999年)

1999年11月28日のcommitによって、少数指定ができるようになった。

項目 サポート
秒数指定 DBL_MAXまで
単位指定
複数指定
少数指定

これによって、5時間30分のSleepをしたければ、sleep 5.5hもサポートできるようになった。

まとめ(再掲)

  • sleepコマンドは、従来秒数指定しかできなかった。(時分秒指定も無し)。
  • coreutilsで実装する段階で、時分秒指定と同時に、複数指定で合算でスリープするようになった(1992年)
  • 浮動小数指定もできるようになった(1999年)
  • BSD系では現状まだ、秒数指定のまま。

以上になります。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1