[unix]sleepとusleep

2016年9月19日月曜日

linux unix

Linuxから他のunixにシェルスクリプトを持っていって、動かないなんてことはたまにある。

例えば、usleepコマンドを使っているスクリプトをBSD系のunixに持っていくとusleepがなくて、動かなかったりする。
Linuxでもモノによってはusleepが初めからは入っていないかもだけど。
# そもそもシェルスクリプトで秒未満の待機なんてするデザインが悪い。ってのはとりあえず置いといて。。。

じゃあ、usleepコマンドがない状態でどうしよっかって考えたんだけど、マニュアルを確認して気づいてしまった。

http://www.freebsd.org/cgi/man.cgi?sleep(1)
BSDではパラメータはstrtodが受け付ける小数でもOKということになっている。
$ uname
Darwin
$ time sleep 0.5

real  0m0.510s
user  0m0.002s
sys   0m0.003s

確かに待機時間が0.5秒になっている。この仕様であれば、usleepコマンドは必要ないかなってのも分からなくはない。

https://linuxjm.osdn.jp/html/gnumaniak/man1/sleep.1.html
Linuxのsleepは最小単位は秒になっている。

https://linuxjm.osdn.jp/html/GNU_coreutils/man1/sleep.1.html
GNU_coreutilsのマニュアルだと、小数の指定もできるよ、ってことになっている。

確かにLinuxでも、小数が指定できるようになっている。
$ uname
Linux
$ time sleep 0.5

real  0m0.503s
user  0m0.002s
sys   0m0.001s

でもsleepコマンドで小数が指定できるのはあくまで拡張仕様であって、移植性を考えると難しいところですね。。。