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

このQ&Aのポイント
  • MacOSXのSnowLeopardでtopコマンドのバッチモードが使用できないですか?
  • スクリプトで使用するためにはバッチモードが必要なのですが、実行するとエラーメッセージが表示されます。
  • どのようにバッチモードで実行する方法はありますか?
回答を見る
  • ベストアンサー

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]

  • BSD系OS
  • 回答数4
  • ありがとう数14

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

  • ベストアンサー
  • fmysh
  • ベストアンサー率79% (27/34)
回答No.4

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 の入門書やシェルの解説本を読み通して、定番の技法を知っておくのが良いと思います。

hurikake
質問者

お礼

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

その他の回答 (3)

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.3

> Load Avgの行にあるCPU使用率やPhysMemの行にある情報を知りたいのです。 なるほど。そのあたりの話を、前回の質問で補足にでも書いていただければ話が早かったのですが… > こうゆうコマンドの使い方はどうやって調べたらたどり着くのですか? > qはつけてもつけなくても結果は一緒でしたが、何のqなんでしょうか? top コマンドは「qキーで終了」するので、その「q」です。 ユーザーの操作で「qを押す」かわりに、リダイレクトで「q」を送り込めばいいだろう、 というだけの思いつきです。 こちらで試したところ、qを送らなくてもいいというか、 入力がリダイレクトされていた場合、入力が終わった時点でtopは終了するようですので、 単に top < /dev/null | grep … で十分だと思います。

hurikake
質問者

お礼

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

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.2

前回の同様な質問に対しての回答と同じですが、 ロードアベレージを知りたいだけなら、uptime コマンドでは何故ダメなのでしょうか? uptime コマンドは、ロードアベレージを表示するためのコマンドです。 ロードアベレージを知りたいのにtopコマンドを使うのは 無意味にプロセス情報を取ったりして無駄が多すぎます。 それでも、どうしても uptime コマンドではなく、top コマンドにこだわるのでしたら、 echo q | top ではどうですか?

hurikake
質問者

お礼

ありがとうございます。 ロードアベレージを知りたいんじゃなくて、 Load Avgの行にあるCPU使用率やPhysMemの行にある情報を知りたいのです。 echo q | top はまさにやりたかったことです。 こうゆうコマンドの使い方はどうやって調べたらたどり着くのですか? qはつけてもつけなくても結果は一緒でしたが、何のqなんでしょうか? 何はともあれありがとうございました。

  • gtx456gtx
  • ベストアンサー率18% (194/1035)
回答No.1

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

関連するQ&A

  • バッチファイルにおけるコマンドの引数

    バッチファイルの中で曜日判定で処理内容を変えたいのですが DOSコマンドのdateでは曜日を出力できませんでした。 そこで、Services for UNIX 3.5をインストールし、UNIXのdateコマンドを使って曜日判定をしようとしたのですが、以下のようにエラーに なってしまいます。 ===バッチの中身== rem 曜日判定 set wk=c:\SFU\bin\date +%a IF %wk% EQU "日” call batch_1.bat  ・・・ ・・・ ====== 上記をコマンドプロンプトで実行しますと date: illegal time format usage: date [-u] [-r seconds] [+format] date [-u] -t [[[[[CC]yy]mm]dd]HH]MM[.SS] [+format] date [-u] [+format] mmddHHMM[yy] +aの使い方が誤っています。 ※ちなみコマンド単体で実行すると正常です。 c:\SFU\bin\date +%a 水

  • コマンドプロンプトで.batファイルを作っています。

    古いバックアップディレクトリを削除するバッチファイルを作りたいです。 cd /d e:\fileDir REM:【最終のディレクトリを削除】 for /F %F in ('dir /b /o:-d') do set fname=%F rmdir /s /q %fname%  をコマンドプロンプト画面に貼り付ければ上手く動作しますが*.batと名前を付けて保存したものをダブルクリックでは全く動作しません。  コマンドプロンプト上で実行するのとバッチファイルで実行することの違いについて調べてみましたがなかなか動作するものになりません。  どなたかご教示いただけないでしょうか    

  • WMICでリモートでバッチが実行できない

    こんにちは。お世話になります。 Windows7Proのコマンドプロンプトで、 wmic /node:"ノード名" /user:"ドメイン名\administrator" /password:パスワード PROCESS CALL CREATE "cmd.exe バッチファイル.bat" として、接続先のノード(同じくwindows7pro)でバッチを実行したいのですが、うまく動作しません。 実行すると、 (Win32_Process)->Create()を実行しています メソッドが正しく実行しました。 出力パラメーター instance of __PAREMATERS { ProcessId = 2280; ReruenValue = 0; }; と表示されるので、接続先のノードでプロセスID2280を調べると、確かにプロセスが存在するのですが、 動作していないようなのです。 試しに、その接続先のノードで、コマンドプロンプトを立ち上げ、 wmic PROCESS CALL CREATE "cmd.exe バッチファイル.bat" と記述してみると、正常に動作しました。 動作しないのはどのような原因が考えられるでしょうか? なんとか動作させたいのです。 何卒ご教授お願いいたします。

  • 変換モード

    変換モード 言語バー?の変換モードを切り替えるときに、そのつどマウスでカーソルを下まで持っていき、 クリックして切り替えたいモードにしているのですが、キーボードの操作のみでそれを切り替える ことは可能でしょうか?〇〇キー+〇〇キーみたいな操作で。 ”般”の文字をクリックしたあとに”G” ”N” ”S” ”O”での変更が出来るのは分かるのですが、そこまですればキーボードを押すのもカーソルを合わせてクリックするのも変わらないと思います。 宜しくお願いします。

  • バッチ処理で IMEの辞書をコピーする方法

    こんにちは。 USBで辞書を持ち歩くために、バッチ処理をしようと思っています。 教えていただけたら幸いです。 方法 1.辞書:パソコン→USB.bat に次のように書く copy C:\Documents and Settings\%USERNAME%\Application data\Microsoft\IMJP8_1\imjp81u.dic E:\USBjisho\ 2.辞書をコピーしたいときに辞書:パソコン→USB.bat を実行 すると、辞書がパソコンからUSBにコピーされると思うんです。 でも、うまくできないんですよ。 MS-DOSプロントには次の二段に分けて書くとコピーができます。 cd C:\Documents and Settings\%USERNAME%\Application Data\Microsoft\IMJP8_1\ copy imjp81u.dic E:\USBjisho\ どうしたら、いいんでしょうか。 バッチ処理初心者に教えていただけるとうれしいです。

  • Accessからバッチ処理を実施し、作成したデータを取り込む処理

    お世話になっております。 題名の件ですが、 ▼Accessマクロ Function EventQuery() Dim objWSH As Object Set objWSH = CreateObject("WScript.Shell") objWSH.Run """C:\Documents and Settings\userName\デスクトップ\EventLogAccess\event.bat""" Set objWSH = Nothing End Function 上記マクロで、event.batというバッチ処理を実行しております。 ▼event.bat set fname=%DATE:/=% eventquery /s server /u userName /p passWord /l application /fi "Id eq 8" /fi "Datetime gt 12/04/2009,01:00:00AM" /r 500 /v >%fname%.txt 上記バッチ処理で、2009年12月4日のイベントログ(アプリケーション)の一覧を取得しております。 【質問内容】 eventquery.vbsのオプションでは日付指定しかできないみたいですが、 実行した当日のログ(アプリケーション)を取得したいと考えております。 方法はないでしょうか? ご教示の程宜しくお願い致します。

  • 文字入力

    ノートパソコンを2台使っています。その1台の文字入力がおかしくなりました。「入力モード」を「ひらがな」にして例えば、Googleの検索バーに「オーケーウェーブ」としたい場合は、「O」「-(ハイフン)」「K」「E」「-(ハイフン)」「U」「X」「E」「-(ハイフン)」「B」「U」とキーを打てば「オーケーウェーブ」と入力・変換されますが、このとおり入力すると「6‐2え‐4え‐b4」となります。入力モードを「直接入力」にして同じように打つと「6‐2e-4xe-b4」となります。どうもキーに書かれている小さな3番目の文字を拾っているようなのです。「O」(オー)のキーだと「O」と「ら」と「6」の3文字が大きい順にありますね。どのようにしたら直るでしょうか。

  • コマンドプロンプトのバッチで "C:\WI

    こんにちは。 今回は、コンピュータについての質問です。 いま、XP pro のコマンドプロンプトで、バッチを使って "C:\WINDOWS\Temp" 以下を空にしようとしてます。 ほかのディレクトリは、以下のコードで ファイルやフォルダが使用中でなければ うまく空にできました。 @ECHO off cd C:\WINDOWS\Temp cacls * /c /t /g everyone:f attrib -h -s * /s /d del * /f /q for /D %%f in ( * ) do rmdir /s /q "%%f" goto end :end ほかのディレクトリというのは "C:\Documents and Settings\User\Local Settings\Temp" のような、"C:\WINDOWS"以外のそれです。 でも、"C:\WINDOWS\Temp"はどうしても空にできません。 「アクセスが拒否されました」といわれてしまいます。 ちなみに、Cドライブ以下のアクセス権は、ぜんぶ Administrators:全権 Authenticated Users:読み取りと実行・フォルダ内容の一覧表示・読み取りだけ許可 SYSTEM:全権 USER(自分のユーザー名):全権 このように設定してます。 "C:\WINDOWS\Temp"を、XP proのコマンドプロンプトの バッチで空にできた方がいましたら その方法をおしえていただけませんか。 よろしくお願いします。

  • win2008r2 バッチファイル起動しない

    バッチファイルの実行に関して、質問させてください。 現在作成したバッチファイルをWindows7上でうまく動きます(コマンドプロプトン、ダブルクリック、スケジューラ)が、windows 2008R2(AD機能)で起動しないです。コマンドプロプトンで【test.bat】Enterキー押すと”操作可能なプログラムまたはバッチ ファイルとして認識されていません”というメッセージが出ます。環境変数のPATHTEXTに".BAT"の記述はあります。スケジューラで実行されるみたいですが、リターンコードは1で、バッチファイルの内容は実行されていないようです。ダブルクリックしても、ほしい結果がでません。結構困っています。解決方法があれば、ご教授ください。

  • VB2010からコマンドの実行方法

    環境  VisualBasic2010Express  WindowsXPSP3 前提  あるプログラムをインストールしていると使えるコマンドがあります。  コマンドプロンプト上から、バッチファイルを実行すると正常動作します。  仮に j.bat とします。  内容は   dxf -o -s c:\test\test0.dxf   dxf -o -s c:\test\test1.dxf   dxf -o -s c:\test\test2.dxf  こんな感じです。  dxfの本体は、とあるフォルダにあるdxf.exeと思われます。  (同名ファイルが複数あるので、特定できていません)  パスが通っているのか、カレントディレクトリ(?)に関係なく実行可能です。  このバッチファイルを実行すると処理は正常です。 現状  VBでボタンを押したらバッチファイルと同じ処理をするプログラムを作りたいのですが  実行する内容が毎回変化します。(dxfコマンドの引数が変わる)   よって同じバッチファイルは使えません。  Dim Buffer(2) As String  Dim Ret(2) As Integer   for i =0 to 2    Buffer(i) = "dxf -o -s c:\test\test" & i & ".dxf"    Ret(i) = Shell(Buffer(i), vbNormalFocus)   next i  こんなプログラムですが、処理がされてません。  コマンドプロンプトは一瞬3個開きます。  dxfをフルパスで記述しても同じです。 質問(1)    コマンドプロンプト上にメッセージが出ているようなのですが    一瞬で消えるので読めません。    コマンドプロンプトを閉じない方法はありませんか?    なければ出力を残す方法はありますか? 質問(2)    バッチファイルを毎回生成して、    そのバッチファイルをShellコマンドで実行すれば動くのかも知れませんが    他に良い方法はありませんか? よろしくお願いします。 私は、VB2010は初めて。 VB6で2個プログラムを作った程度です。 コマンドプロンプト関連(?)は初めてです。