sleepコマンドについての覚え書き
引数について
sleepコマンドは、引数に指定した秒数、停止して待つのだが、その引数は
- 後ろに「m」(分)、「h」(時間)、「d」(日)を付けることができるので、秒以外の指定もできる。「s」で秒指定もできるが、デフォルトなので省略可。
- 引数は複数付けることができ、その合計時間sleepする
- 更に、小数を使った書き方ができる
といった指定ができ、
$ sleep 105 $ sleep 1m 45s $ sleep 1.75m
のいずれも、1分45秒待つ処理になる。
サスペンド状態に関する実験
$ sleep 5 && zenity --info || zenity --error
を実行させ、5秒経過させると情報ダイアログが出るが、5秒以内にCtrl+Zを押すと、その時点でエラーダイアログが出る。
$ sleep 5; zenity --info
とした場合、5秒経過させると情報ダイアログが出るのは同じだが、5秒以内にCtrl+Zを押すと、その時点で情報ダイアログが出る。
$ (sleep 5 && zenity --info || zenity --error)
のように、かっこで囲むと、5秒以内にCtrl+Zを押した場合、処理全体に対してサスペンドされ、エラーダイアログは出ない。
コマンドを実行して(Enterを押したとき)から5秒が経過する前にfgでフォアグラウンドに戻すと、sleepコマンド実行の5秒後になるまで停止を続けた後、情報ダイアログが出る。もし、5秒以上経過したあとにfgをした場合、すぐに情報ダイアログが出てくる。いずれにしても、エラーダイアログば出ない。
sleepコマンドは、サスペンドさせても、カウント処理は続いていて、サスペンドによって、後ろの命令の実行を遅らせることはしないという性質があるが、fgかbgを実行させない限りは止まったまま。
なお、
$ (sleep 5; zenity --info)
を実行しても上と同様の結果となる。
かたまりのバックグラウンド実行と、sleep後の処理のキャンセルについて
$ (sleep 30; zenity --info) & [1] xxxxx(プロセスID)
として、このかたまりをバックグラウンドで実行させると、30秒後に情報ダイアログが出る。
もし、sleepの後ろの処理を全てキャンセルしたいのであれば、ジョブ番号(上の例では「[1] ...」と出てきているので1番)指定でkillする(「%」の後ろにこの数字を続けて書いて指定する)。
$ kill %1 [1]+ 終了しました ( sleep 30; zenity --info )