みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

topコマンドでバッチモードが使えない。

topコマンドでバッチモードが使えない。

環境は
MacOSXのSnowLeopard
Darwin Kernel Version 10.4.0
です。

スクリプトで使いたいのでバッチモードが使用できないと困るのですが、
実行したら下記のようなメッセージが出ます。
バッチモードで実行する方法はないでしょうか?

$ top -b
invalid option or syntax: -b
top usage: top
[-a | -d | -e | -c <mode>]
[-F | -f]
[-h]
[-i <interval>]
[-l <samples>]
[-ncols <columns>]
[-o <key>] [-O <secondaryKey>]
[-R | -r]
[-S]
[-s <delay>]
[-n <nprocs>]
[-stats <key(s)>]
[-pid <processid>]
[-user <username>]
[-U <username>]
[-u]

投稿日時 - 2010-08-08 17:40:13

QNo.6095609

すぐに回答ほしいです

質問者が選んだベストアンサー

Mac OS X の top コマンドは動作モードは non-logging(デフォルト) と logging があり、
他のOSでの interactive と batch モードに相当します。

logging モードで起動するには "top -l サンプリング数" のように指定します。

> $ top < /dev/null | grep ^Load
> でLoadが先頭にある行だけを取れるはずなんですけど、
> 何も取れません。

top を non-loggingモードで動かすと、画面制御コードが混ざったものが標準出力に流れるので、テキスト行指向の grep では引っかからないことも起こるでしょう。
パイプに繋ぐならば、logging モードを明示的に指定すべきです。

% top -l 1 |grep '^Load'
Load Avg: 0.40, 0.46, 0.48

今回のように 同じ top という名前のコマンドでも、OS によって挙動の違うものになっていることもままあります。
特定のコマンドに関することならば、そのコマンドのマニュアルに最初に当たるべきでしょう。

コマンド組み合わせて望みの動作をさせる方法を身につけたいということならば、UNIX の入門書やシェルの解説本を読み通して、定番の技法を知っておくのが良いと思います。

投稿日時 - 2010-08-09 15:31:35

お礼

ありがとうございます。

logging モードがあったのですね。
非常に助かりました。

投稿日時 - 2010-08-15 18:03:08

ANo.4

このQ&Aは役に立ちましたか?

11人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

> Load Avgの行にあるCPU使用率やPhysMemの行にある情報を知りたいのです。

なるほど。そのあたりの話を、前回の質問で補足にでも書いていただければ話が早かったのですが…

> こうゆうコマンドの使い方はどうやって調べたらたどり着くのですか?
> qはつけてもつけなくても結果は一緒でしたが、何のqなんでしょうか?


top コマンドは「qキーで終了」するので、その「q」です。
ユーザーの操作で「qを押す」かわりに、リダイレクトで「q」を送り込めばいいだろう、
というだけの思いつきです。

こちらで試したところ、qを送らなくてもいいというか、
入力がリダイレクトされていた場合、入力が終わった時点でtopは終了するようですので、
単に
top < /dev/null | grep …
で十分だと思います。

投稿日時 - 2010-08-08 22:18:54

お礼

本当にありがとうございます。

すいません。もうひとつ質問させてください。

$ top < /dev/null | grep ^Load
でLoadが先頭にある行だけを取れるはずなんですけど、
何も取れません。
正規表現が使えないのかよくわからないですが、
1行だけ抜き出す方法はないでしょうか?

投稿日時 - 2010-08-08 23:57:27

ANo.2

前回の同様な質問に対しての回答と同じですが、
ロードアベレージを知りたいだけなら、uptime コマンドでは何故ダメなのでしょうか?

uptime コマンドは、ロードアベレージを表示するためのコマンドです。
ロードアベレージを知りたいのにtopコマンドを使うのは
無意味にプロセス情報を取ったりして無駄が多すぎます。


それでも、どうしても uptime コマンドではなく、top コマンドにこだわるのでしたら、

echo q | top

ではどうですか?

投稿日時 - 2010-08-08 20:01:42

お礼

ありがとうございます。

ロードアベレージを知りたいんじゃなくて、
Load Avgの行にあるCPU使用率やPhysMemの行にある情報を知りたいのです。

echo q | top はまさにやりたかったことです。
こうゆうコマンドの使い方はどうやって調べたらたどり着くのですか?
qはつけてもつけなくても結果は一緒でしたが、何のqなんでしょうか?

何はともあれありがとうございました。

投稿日時 - 2010-08-08 21:45:00

ANo.1

>$ top -b
>invalid option or syntax: -b
エラーメッセージも表示されているのに、ここで質問している質問者様が使うコマンドではないと思います。 もう少し勉強してからご利用下さい。

投稿日時 - 2010-08-08 18:54:13

あなたにオススメの質問