人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

●質問者: cochoo
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
●200ポイント ベストアンサー

きちんと、測定できてますよ。
./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


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

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ