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では止められませんでした。謎は深まります。続く。
コメント