sleepコマンドはバックグラウンドで時を刻むのか

sleepコマンドは、バックグラウンドでは時が止まるのでしょうか。
sleepコマンドの発行後、CTRL-Zを押してバックグラウンドに回して確認してみます。

takk@deb8:~$ date +%T;sleep 5
19:41:15
^Z
[1]+  停止                  sleep 5
takk@deb8:~$ 

sleep 5を実行し、すぐにCTRL-Zを押しました。

しばらくしたら、下のようにfgコマンドを実行します。

takk@deb8:~$ date +%T;fg;date +%T
19:41:33
sleep 5
19:41:33
takk@deb8:~$ 

sleep 5コマンドの前後の時間が一致しています。つまり、fgで戻ってくるまでの間sleepは時を刻んていました。

sleepする時間を長くして確認してみましょう。1分を指定します。

takk@deb8:~$ date +%T;sleep 1m
19:43:47
^Z
[1]+  停止                  sleep 1m
takk@deb8:~$ date +%T;fg;date +%T
19:44:08
sleep 1m
19:44:47
takk@deb8:~$ 

sleep 1の実行時の時間が43分47秒なので、ちょうど1分経過した後dateコマンドが実行されています。

次は、最初からバックグラウンドで実行してみます。

takk@deb8:~$ date +%T;sleep 5 &
20:47:41
[1] 2619
takk@deb8:~$ ps
  PID TTY          TIME CMD
 2258 pts/1    00:00:00 bash
 2619 pts/1    00:00:00 sleep
 2620 pts/1    00:00:00 ps
takk@deb8:~$ date +%T;fg;date +%T
20:47:49
[1]+  終了                  sleep 5
bash: fg: カレント: そのようなジョブはありません
20:47:49
takk@deb8:~$ 

あれ、どういうことでしょうか、fgで再開しようとしても、ジョブがないといわれます。
裏で動いているはずのsleepコマンドがdateの実行で停止しているように見えます。
dateだけ実行して確認してみましょう。

takk@deb8:~$ date +%T;sleep 5 &
20:49:35
[1] 2624
takk@deb8:~$ date +%T
20:49:41
[1]+  終了                  sleep 5
takk@deb8:~$ 

やはりそのようです。

もう一度、CTRL-Zで試します。dateで停止されるのでしょうか

takk@deb8:~$ date +%T;sleep 5
20:51:30
^Z
[1]+  停止                  sleep 5
takk@deb8:~$ 
takk@deb8:~$ 
takk@deb8:~$ date +%T
20:51:44
takk@deb8:~$ ps
  PID TTY          TIME CMD
 2258 pts/1    00:00:00 bash
 2630 pts/1    00:00:00 sleep
 2632 pts/1    00:00:00 ps
takk@deb8:~$ 

CTRL-Zでバックグラウンドへ回したsleepは、dateでは止められませんでした。謎は深まります。続く。

コメント

タイトルとURLをコピーしました