Unix/Linux の `top` コマンド使用詳解
¶ TOP 概要
top コマンド(top command)は Unix/Linux を使ううえで最も基本的なツールの 1 つです。Windows のタスクマネージャのように、現在動作しているプログラムの実行状況を監視できます。top はプログラムの監視としても最も手軽な方法の 1 つで、メモリ使用量や CPU 使用量、その他さまざまな情報を観察できます。類似ツールも多く、htop や gtop のような派生版もあります。興味があれば調べてみてください。ただし基本用途であれば top で十分です。
使い方は簡単です:
$ top

デフォルトで表示される項目は次のとおりです:
PID: タスクの Process IDUSER: 実行ユーザーPR: 優先度(Priority)NI: Nice 値。負の値は優先度が高く、正の値は優先度が低いことを意味しますVIRT: 使用した仮想メモリ(Virtual Memory)の総量(kB)RES: 常駐メモリ(Resident Size)(kB)SHR: 使用した共有メモリ(Shared Memory)の総量(kB)S: 状態(Status)- R: 実行中
- D: 割り込み不可のスリープ(通常 I/O 待ち。signal で中断できない)
- S: スリープ(起床可能)
- T: 中断中または停止。
SIGSTOP/SIGTSTPによる停止、または ptrace によるトレース(デバッガ等)で発生することがあります - Z: ゾンビ。通常は Child が終了し、Parent による wait()/回収待ちの状態です
%CPU: CPU 使用率(%)。1 コアが 100% なので、マルチコアでは 100% を超える場合があります%MEM: 全メモリに対する使用率(%)TIME+: 実行時間COMMAND: コマンド名
¶ TOP のインタラクティブ操作
top に入ったあと、インタラクティブに操作する使い方があります。以下ではよく使うキーをいくつか紹介します。その他は 參考資料 のリンクを参照してください。おすすめの学習方法は、記事を読みながら実際に操作してみることです。
¶ タスクの並び替え
タスクの並び替えは最重要の操作だと思います。top で一番見たいのは「どのプロセスが CPU やメモリをどれだけ使っているか」だからです。
M: メモリ使用率で並び替えN: PID で並び替えP: CPU 使用率で並び替えT: 実行時間で並び替え>/<: 並び替え列を左右に切り替えR: 逆順
¶ 一般操作
ここで一番大事なのは q で終了できることです 😂
h/?: ヘルプ- Enter/Space: 画面更新(デフォルト 3 秒)
=: フィルタ解除(検索後)B: 太字表示d/s: 更新間隔の変更I: CPU 使用率表示 / CPU コア数表示の切り替えk: 特定 PID の終了L: 文字列検索(&と併用)q: 終了r: nice 値の変更(正の値は優先度を下げ、負の値は優先度を上げる。sudo が必要)u/U: ユーザーで絞り込みW: 現在の設定を書き込み、次回起動時も反映Z: 色の変更
¶ 上部パネル設定
l: 稼働時間の表示/非表示m: メモリの表示/非表示t: タスク(CPU サマリ)の表示/非表示1: 各コアの表示/非表示
¶ タスクパネル設定
f を押すとより多くのシステム情報を表示できます。b、x、y と組み合わせると、何が動いているかがより分かりやすくなります。
b: タスクパネルのハイライトx: 列のハイライト(bが必要)y: 行のハイライト(実行中のプロセスが光る。bが必要)c: コマンドのフルパス表示f: 表示フィールドの設定(非常に多くの情報がある)d: 表示の切り替え- 右矢印: 並び替え設定(上下キーで順序変更)
- 左矢印: 並び替え解除
esc/q: 設定終了
i: アイドルタスクの非表示n/#: 表示タスク数の設定と表示j: 右寄せ
¶ 例
以下は CPU 順(P)で並び替えてから b、x、y でハイライトした状態です:

h を押したときのヘルプ:

¶ TOP のコマンドライン操作
top はコマンドライン引数も持っています:
$ top -h
top -hv | -bcHisS -d delay -n limit -u|U user | -p pid -w [cols]
ここでは重要なものだけを取り上げます。詳細なパラメータ説明は 參考資料 を参照してください。
例えば、次は acliu ユーザーの上位 10 タスクを表示します:
$ top -n 10 -u acliu
また、バッチモード(batch mode、オプション -b)を使うと、Shell の他ツールと組み合わせやすくなります。例えば:
$ top -b -n 3 | grep "python"
これにより top の出力から “python” を含む行を抽出します。また -n(バッチ回数)を設定しているので、3 回分のバッチ状態(更新ごとの状態)が出力されます。
¶ 參考資料