質問: 【至急】linuxで複数バックグラウンドプロセスの処理時間をtimeコマンドで測定できますか? 表題の方法の裏づけを確認したいため、質問させてください。 たとえば、10MBのデータをバックグラウンドで作成する場合など、バックグラウンドの処理時間を測定したいのですが、timeコマンドでは正しく取得できているかどうかに疑問があります。 実行結果は以下のとおりです。 # time dd if=/dev/zero of=./data bs=1024 count=10240 & 1024+0 records out real 0m 0.28s user 0m 0.00s sys 0m 0.26s <ここでreturnを押下すると以下のメッセージが表示される> [1] + Done time dd if=/dev/zero of=./data bs=1024 count=10240 [※] &を指定しない場合の処理時間と差はほとんどありませんので、正しく動作していると思いますが、[※]印のメッセージが(中断を示唆しているようで)気になっております。 質問は、次の3点です。 1timeコマンドはバックグラウンド処理時間を測定できますか? 2そうでない場合、代替方法がございましたらご教授をお願いいたします。 3[※]印は何を意味していますか? よろしくお願いいたします。
回答: きちんと、測定できてますよ。 ./data のサイズが、期待通りのサイズになっていることでも、処理が完了していることが分かると思います。 ``` [1] + Done time dd if=/dev/zero of=./data bs=1024 count=10240 ``` このメッセージは、処理の中断ではなく、処理の完了をフォアグラウンドジョブに伝えるメッセージです。 time コマンドでの測定ではなく、dd コマンドをバックグラウンドジョブで動かしても、同様のメッセージが通知されます。 ``` % dd if=/dev/zero of=./data bs=1024 count=10240 & ``` ただ、どんな場合でも正しく動作するか、というと気をつけなくてはいけないことがひとつあります。 フォアグラウンドジョブが無くなった場合です。 例えば、もっと時間がかかる処理を測定しようとして、time コマンドの出力先をリダイレクトして、シェルを終了させてしまう場合です。 ``` % time 時間がかかる処理 > result.txt & % exit # 処理が終了する前に、抜けてしまう ``` フォアグラウンドジョブが無くなると、バックグラウンドジョブには HUP シグナルが送られます。 動かしているプロセスが HUP シグナルを受け取った動作はデフォルトが exit、つまりプロセスの終了なので、処理が中断される可能性が大きいです。 そういう場合には、nohup コマンドを使います。 ``` % nohup time 時間がかかる処理 > result.txt & % exit # 処理が終了する前に抜けても、大丈夫 :-) ``` 参考になる man は、以下のようなところになるでしょうか。