【至急】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点です。
①timeコマンドはバックグラウンド処理時間を測定できますか?
②そうでない場合、代替方法がございましたらご教授をお願いいたします。
③[※]印は何を意味していますか?

よろしくお願いいたします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/03/04 11:05:43
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154

ポイント200pt

きちんと、測定できてますよ。
./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 は、以下のようなところになるでしょうか。
http://linuxjm.sourceforge.jp/html/procps/man1/kill.1.html
http://linuxjm.sourceforge.jp/html/GNU_sh-utils/man1/nohup.1.html

id:cochoo

丁寧にご回答いただきありがとうございます。とてもわかりやすいです!!
>フォアグラウンドジョブが無くなった場合
仰るとおりです。nohupコマンドについては曖昧でしたので、大変助かりました。
ありがとうございました!!

2013/02/27 21:23:14

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません