top - コマンドラインオプションとYコマンドの利用について

スポンサーリンク

topコマンドはシステム情報やプロセスを対話的に表示できます。この記事は以下のtopコマンドについての補足的な記事になります。

top - システム情報やプロセスを対話的に表示する
topコマンドはシステム情報やプロセスを対話的に表示できます。この記事では、対話モードでの操作について紹介します。対話モードでの操作は項目の設定、検索やフィルタ、マルチウインドウ等を行うことができます。そして、表示設定を保存することもできま...

 

この記事では、topコマンドのコマンドラインオプションについてと、特にその中のバッチモードについてを簡単に紹介します。また、さらにインタラクティブコマンドで少し特殊なYコマンドについても紹介します。この記事で利用しているtopコマンドはprocps-ng v3.3.16のものとなります。

スポンサーリンク

コマンドラインオプション

topコマンドには様々なコマンドラインオプションがあります。多くのオプションは対話的な操作を行うコマンドと機能的に同じものがあります。例えば、コマンドラインオプションには以下のようなものがあります。

-h : ヘルプ
-b : バッチモード
-c : コマンドライン/プログラム名の切り替え
-d : 更新間隔の設定 引数は少数可(単位は秒) 例)10.1
-E : メモリのスケールを変更 例) k m g t p e
-H : タスク表示/スレッド表示の切り替え
-i : アイドル状態の行を表示
-n : 表示の更新回数の制限
-o : ソートフィールドの変更 (+,-を利用して、ソート方向を決定 +は昇順,-は降順)
-O : -oオプションで利用できるフィールドの表示
-p : PID監視モード (-pN1 -pN2 ... または -pN1,N2,N3)
-s : セキュアモード(一部の機能が制限されるモード)
-c : 時間を累積モード(終了した子プロセスの時間を親プロセスに加算)に変更
-u | -U : ユーザフィルタモード(-U number or name)
-w : 出力幅を変更 (-bバッチモードと併用)(COLUMNSとLINESの環境変数を使用)(-w numberで行の数を指定)
-1 : マルチCPUの情報を1行でまとめた表示/個々のCPU情報での表示の切り替え

 

 

 

セキュアモード

-sオプションを用いると、topはセキュアモードになります。これは、一部の機能が制限される機能になります。例えば、セキュアモードで起動したtopは、例えば、インタラクティブコマンド'k'(タスクキル)やインタラクティブコマンド'r'(nice値の変更)が利用できなくなります。

 

 

 

 

バッチモード

topコマンドの動作を非対話的に操作するオプションとして、バッチモードがあります。このバッチモードはtopコマンドの出力の加工、ファイル出力を行うのに便利です。
バッチモードは-bオプションで利用できます。-bオプション単体で利用するとtopの更新が行われるたびにtopの画面の表示が出力されます。1回や3回表示したいなどの場合は-nオプションで表示の回数を指定できます。

バッチモードではtopの設定が適用した状態で利用できます。デフォルトのtopコマンドの設定を変更したくないため、ここでは、topのシンボリックリンクファイルを作成し、topの設定ファイルを作成し、そのシンボリックリンクファイルからtopを実行してみます。
topの設定ファイルはtopのプログラム名を用いて作成され、また、プログラム名で適用される設定ファイルが決まります。

設定ファイルを用いてバッチモードを利用する場合、topのヘッダ情報を削除したり、フィルタを適用した状態の出力等ができます。
設定ファイルの作成はtopの画面でのインタラクティブコマンドの'W'でできます。例えば、通常のモードでtopを起動して、インタラクティブコマンドの'l','t','m'で情報を切り替えていくとヘッダ部分を削除した状態にでき、その状態を設定ファイルに保存するとバッチモードで利用した場合でもヘッダ部分を削除された状態で表示できます。

topのシンボリックリンクファイルの作成と実行

設定ファイル作成後(1秒更新でpid=1は基本的にinitプロセス)

ヘッダ部分の削除のために利用したインタラクティブコマンドについて
'l': load avarage部分の切り替え
't': task/thread部分の切り替え
'm':memory部分の切り替え

表のヘッダ部分や空行の削除を行いたい場合はsedコマンド等が便利です。

表のヘッダ部分と空行の削除

 

 

 

Yコマンドについて

Yコマンドを利用する簡単な例

topコマンドの対話的なコマンドに、Yコマンドがあります。これは事前に設定の準備が必要ですが、topの画面でコマンド出力の表示やファイルの表示を行うことができます。

設定ファイルは対話的なコマンドでWコマンドが利用して作成できます(例えば、私の環境では~/.config/procps/toprcに保存されます)。そのファイルを利用し、例えば、以下のように末尾に追記することで、

~/.config/procps/toprc

/home/ubuntu/memo.txt

Yコマンドで以下のような表示を行うことができます。Yコマンドを利用すると、始めにpidについて尋ねられ、次に何の表示を行うかのオプションの選択が尋ねられます。例えば、上の例のように追加した場合は'memo file'という名前が表示されます。この'memo file'を選択すると指定したファイルの内容が表示されます。

pidの選択(デフォルトは先頭行、この例ではpidは利用しません)

ask_pid

オプションの選択

top_select_options

ファイルの内容の表示

top_display_content

 

 

 

設定ファイルの記入方法の構文

記入方法の構文

区切り文字がタブ文字であることに注意しつつ、それぞれの意味は

<type>: 'file' か 'pipe' の文字列
<name>: 選択画面で表示するときのオプションの名前
<fmts>: <type>が'file'の場合はファイルパスで、<type>が'pipe'の場合はコマンド

になります。

 

 

 

プロセスIDを利用した例

Yコマンドを利用するとき、プロセスIDがパラメータとして利用できます。プロセスIDを利用したいは'%d'の指定子を用います。'%d'の指定子に指定されたプロセスIDが入ります。この指定子は、例えば、プロセスのステータスを表示したい場合に/proc/<プロセスID>/statusを表示したい場合に利用できます。
例として、~/.config/procps/toprcに以下のように追記します。

~/.config/procps/toprc

その後、オプションで選択を行うと以下のように表示できます。

表示結果

top_proc_status

ここで、awkコマンドは表示したい部分のフィルタを行っています。expandコマンドはタブ文字をスペースに変換しています。

補足として、expandコマンドがない場合は、以下のように表示結果としてタブ文字が'^I'のような文字として表示され、少々見づらい感じになります。

expandコマンドがない場合

top_no_expand