TOP(1)

名前
top - CPU をたくさん使っているプロセスを表示する

書式
top [-] [d delay] [p pid] [q] [c] [C] [S] [s] [i] [n iter] [b]

説明
top は実時間でプロセッサの活動の推移を見るためのものである。 top はシステムのタスクを CPU をたくさん使っている順にリストする。 またプロセスを操作するための対話的なインターフェースも持っている。 タスクは CPU の使用度、メモリの使用量、実行時間などでソートできる。

この top は、普通のものに比べてより設定が柔軟に行える。 様々な機能が、対話的なコマンドや、 個人/システムの設定ファイルによって指定できる。 詳しくは以下を見てほしい。

コマンドラインオプション
スクリーンを更新する間隔を指定する。 これは対話コマンド s を用いれば変更できる。 指定されたプロセス ID のプロセスのみを監視する。 このフラグは 20 回まで指定できる。 このオプションは対話的には指定できず、設定ファイルにも書けない。 これを指定すると top は遅延時間無しで更新を続ける。 呼び出し元がスーパーユーザー特権を持っていると、 top は可能な最高の優先度で実行される。 累積モードを指定する。各プロセスが、死んだ子プロセスの分も含めて 利用した CPU 時間とともにリストされる。 ps(1) の -S フラグと似た動作をする。以下の、対話的コマンド S に関する議論も参照のこと。 top をセキュアモードで動作させる。 このモードでは、潜在的に危険な対話的コマンドの実行を禁止する (以下を見よ)。 セキュアな top は、空いた端末で走らせたままにしておいても全く問題ない。 top に idle なプロセスやゾンビプロセスを無視させる。以下の対話的コマンド i も参照。 各々の CPU の状態だけでなく全体の CPU の統計も表示する。 このオプションは SMP システムにしか影響しない。 コマンド名だけでなく、コマンドラインを表示する。 コマンド名だけの方が便利なようなので、デフォルトの動作はこちらに変更された。 繰り返しの回数。この回数だけ表示を更新して、終了する。 バッチモード。出力を top から他のプログラムやファイルに送るときに便利。 このモードでは、 top はコマンドライン入力を受けつけない。 n オプションで指定された回数だけ表示を繰り返すか、 kill されるまで実行を続ける。 出力はダム端末向けのプレインテキストになる。

フィールドの説明
top はプロセッサの状態に関する様々な状態を表示する。 デフォルトでは表示は 5 秒おきに更新されるが、 この間隔はコマンドラインオプション d または対話的コマンド s で変更できる。 この行は、システムが起動してからの経過時間と、 システムの 3 種類の負荷平均 (load average) を表示する。 後者は実行待ちの状態にあるプロセスの、最近 1, 5, 15 分間の平均数である。 この行は uptime(1) の出力ととてもよく似ている。 uptime 表示は対話的コマンド l によってトグルできる。 最後の更新時に実行中だったプロセスの総数。 さらに、 実行状態 (running)・ スリープ状態 (sleeping)・ ゾンビ状態 (zombie)・ 停止状態 (stopped) にあるプロセスの数もそれぞれ表示される。 processes と CPU states の表示は対話的コマンド t によってトグルできる。 CPU が、ユーザーモード・システムモード・nice されたタスクの実行中・ アイドル状態、 それぞれにある時間をパーセンテージで表示する (nice されたタスクは nice 値が負のもののみ)。 nice されたタスクで費やされた時間は、 システムモードやユーザーモードの時間としてもカウントされるので、 これらの総計は 100% より大きくなる。 processes と CPU states の表示は対話的コマンド t によってトグルできる。 メモリの利用統計。利用できるメモリの総量・空きメモリ・ 利用中のメモリ・共有メモリ・バッファに用いられているメモリ。 メモリ情報の表示は対話的コマンド m によってトグルできる。 スワップ空間の統計。スワップ空間の総量・利用可能なスワップ空間の量・ 利用されているスワップ空間の量。これと Mem の表示は free(1) の出力ととてもよく似ている。 タスクのプロセス ID。 タスクの親プロセス ID。 タスクの所有者のユーザー ID。 タスクの所有者のユーザー名。 タスクの優先度。 タスクの nice 値。負の値が高い優先度を意味する。 タスクの「コード+データ+スタック」のサイズ。キロバイト単位。 タスクのコードサイズ。カーネルプロセスについては変な値になり、 ELF プロセスに対しては動作しない。 「データ+スタック」のサイズ。 ELF プロセスに対しては動作しない。 テキスト常駐サイズ。 そのタスクの、スワップアウトされた部分のサイズ。 dirty マークされたページのサイズ。 最後に利用されたプロセッサ。 (これが時々変更するのはバグではない。 Linux はわざと weak affinity を使っているからである。 また実行中の top の動作そのものが CPU 時間に対する余分な要求となることによって
 weak affinity を壊すかもしれず、 プロセスのカレント CPU の変更がより多くなるかもしれない。) タスクの用いている物理メモリの総量。キロバイト単位。 ELF プロセスの用いているライブラリのページは勘定に入るが、 a.out プロセスでは入らない。 タスクが利用している共有メモリの量がこのカラムに表示される。 このタスクの状態。状態は以下のいずれか。 S スリープ状態・ D 割り込み不可能なスリープ状態・ R 実行中・ Z ゾンビ・ T 停止された/トレース中。 これらの後にさらに文字が続くこともある。 < 負の nice 値を持つプロセス・ N 正の nice 値を持つプロセス・ W スワップアウトされたプロセス (カーネルプロセスに対しては正しく動作しない)。 タスクがスリープしているカーネル関数が表示される。 /boot/psdatabase またはカーネルのリンクマップ /boot/System.map があれば名前が、なければアドレスが表示される。 タスクが起動してから利用した CPU 時間の総計。 累積モードがオンになっていると、 プロセスの既に死んだ子どもが使った CPU 時間もここに含まれる。 累積モードはコマンドラインオプション S で有効になり、また対話的コマンド S によってトグルできる。累積モードの時は、ヘッダ行が CTIME に変わる。 最後にスクリーンが更新されて以降、タスクが CPU を占有していた割合。 プロセッサひとつ辺りの時間に対するパーセンテージで表示される。 タスクの物理メモリの占有量。 タスクのコマンド名。一行に収まらない場合は切り詰められる。 メモリにあるタスクはコマンドライン全体が表示されるが、 スワップアウトされたタスクは、名前だけが括弧で括られて表示される (例: "(getty)")。 これらの kmem top からのフィールドはサポートされていない。

対話的コマンド
top は実行時に、 いくつかのワンキーコマンドを受付ける。 コマンドラインで s オプションが指定された場合は、これらのいくつかは使えなくなる。 すぐに表示を更新する。 スクリーンを消去して再描画する。 ヘルプ画面を表示する。コマンドの簡単なまとめと、 セキュアモード・累積モードかどうかの状態が表示される。 プロセスを kill する。プロンプトが出るので、 対象タスクの PID とそれに送るシグナルを指定する。 通常の kill にはシグナル 15 を送る。 確実に (しかしやや唐突に) kill するにはシグナル 9 を送る。 デフォルトのシグナルは、 kill(1) と同じく 15 の SIGTERM である。このコマンドはセキュアモードでは使えない。 idle なプロセスとゾンビプロセスを無視する。これはトグルスイッチになっている。 Solaris ビュー (CPU パーセンテージが CPU の個数で割り算される) と Irix ビュー (CPU パーセンテージが単に時間に対するものになる) とを切替える。 表示するプロセスの数を変更する。 プロンプトが出るので、数を入力する。 画面サイズによって自動的に決定される表示プロセス数を変更する。 0 を指定すると、top は画面に収まる限り、 できるだけ多くのプロセスを表示しようとする。これがデフォルトである。 終了する。 プロセスを renice する。プロンプトが出るので、 対象タスクの PID とそれに設定する nice の値を表示する。 正の値を入力するとプロセスの nice 値は減少し、優先度が低くなる。 root が top を実行している場合は、負の値を入力すれば、 プロセスは通常よりも高い優先度を獲得できる。 デフォルトの renice 値は 10。 である。このコマンドはセキュアモードでは使えない。 累積モードをトグルする。 ps -S と等価。すなわち、CPU 時間にプロセスの (既に死んだ) 子プロセスの分を加える。プログラムによっては、 フォークしてたくさんのタスクを分離することがある (例えばコンパイラ)。 ノーマルモードでは、このようなプログラムが実際よりも 少ない資源で動作しているようにみえる。 しかし逆に、シェルや init などに対しては、ノーマルのほうが正しい動作である。 いずれにせよ、累積モードを試してみて、 別の見方で CPU 利用率を見てみるとよい。 更新の間隔を変更する。プロンプトが出るので、更新の時間間隔を秒数で入力する。 小数値もマイクロ秒の桁まで認識される。 0 を入力すると連続更新となる。 デフォルトの値は 5 秒。 低い値を入れると表示は読めないほど速くなり、負荷が非常に上昇する。 このコマンドはセキュアモードでは使えない。 表示するフィールドを追加・削除する。 詳細は以下を見よ。 表示するフィールドの順序を変更する。 詳細は以下を見よ。 負荷平均・uptime 情報表示のトグル。 メモリ情報表示のトグル。 プロセスと CPU 状態の情報表示のトグル。 コマンド名 (コマンドライン全体) の表示のトグル。 タスクを pid の (数値的な) 順に並べる。 タスクを年齢順 (新しい順) に並べる。 タスクを CPU 利用率の順に並べる (デフォルト)。 タスクを常駐メモリの利用量の順に並べる。 タスクを時間/累積時間の順に並べる。 現在の設定を ~/.toprc に書く。 top の設定ファイルを書くにはこの方法を用いるのがよい。

フィールド画面・順序指定画面
f, F, o, O を押すと画面が切り替わり、 最上行でフィールドの順序が、 残りの部分でフィールドの内容に関する短い説明が表示される。 フィールド順序の指定文字列は、次のような文法に従う: あるフィールドに対応している文字が文字列中で大文字のときは、 そのフィールドは表示される。 この場合、さらにフィールドの説明の前にアスタリスク (*) がつけられる。 フィールドの順番は文字列中の文字の順番に対応する。 フィールド選択画面では、フィールドを表示するかどうかを、 対応する文字を押すことでトグルできる。 順序指定画面では、フィールドに対応する文字の大文字を押せば そのフィールドが左に移動し、小文字を押せば右に移動する。

設定ファイル
top はデフォルトの設定を 2 つのファイル (/etc/toprc と ~/.toprc) から読み込む。グローバルな設定ファイルは、 特権のないユーザーに対して top の利用をセキュアモードに制限するような用途に利用できる。 このようにしたい場合は、 セキュアモード指定の 's' と デフォルトの更新間隔の数字 d (2<=d<=9: 秒単位) とを 1 行にして、 このファイルに書いておく。 個人の設定ファイルは 2 行からなる。 1 行目は大文字・小文字の英文字からなり、 どのフィールドをどんな順序で表示するかを指定する。 各文字は top のフィールド画面と順序指定画面での文字に対応する。 これはあまり直感的ではないので、 フィールドの選択と並べ替えは top を実行して行い、 対話的コマンド W を用いて設定を保存すると良い。 二行目はよりおもしろい (そして重要である)。 ここには他のオプションの情報が入る。 最重要な注意。設定ファイルをセキュアモードで保存すると、 ~/.toprc の二行目から 's' を消さない限り、 セキュアでない top は実行できなくなる。 数字は更新の時間間隔を表し、'S' は累積モードを、 小文字の 'i' は非アイドルモードを、 大文字の 'I' は Irix ビューをそれぞれ表す。 対話的モードの各コマンドと同様、小文字の 'm', 'l', 't' を指定すると、 それぞれメモリ・uptime・プロセスと CPU 状態を表示しなくなる。 今のところは、ソート順をデフォルト (CPU 利用度) から変更することはできない。

注意
この proc ベースの top は、 /proc にマウントされた proc ファイルシステムのファイルを読み込んで動作する。 /proc がマウントされていないと、 top は動作しない。

%CPU は更新の間での cpu 時間/実時間のパーセンテージを表示する。 最初の更新の時には、適当な短い時間が用いられるので、 top 自身の CPU 利用度が大きくなる。その後は top は下の方に落ち、 CPU の利用統計がより信頼できるかたちで表示される。

SIZE フィールドと RSS フィールドはプロセスのページテーブルや task_struct を考慮しない。これはメモリに常駐し、最低でも常に 12K のメモリを消費する。 SIZE はプロセスの仮想サイズ (code+data+stack) である。

累積モードにおいて、プロセスの時間が親に足されるためには、 そのプロセスが死ななければならないことに注意。 各プロセスを上に辿って時間を加えていくほうがおそらく便利な動作ではあろうが、 これは高く (おそらくあまりにも高く) つきすぎるだろう。 いずれにせよ、これによって top の動作は ps とは互換性がなくなっている。

ファイル
/etc/toprc グローバルな設定ファイル
~/.toprc 個人の設定ファイル

関連項目
ps(1), free(1), uptime(1), kill(1), renice(1).

バグ
端末ウィンドウが 70x7 程度より小さいと、 top は情報を正しく整形できない。 ELF プロセスに対しては、多くのフィールドがまだ問題を抱えている。 25 行以下の端末ウィンドウに対しては ヘルプスクリーンがまだ最適化されていない。

著者
オリジナルの top は、Branko Lankester <lankeste@fwi.uva.nl> の ps プログラムを元にして Roger Binns が書いた。 Robert Nation <nation@rocket.sanders.lockheed.com> は、 Michael K. Johnson <johnsonm@redhat.com> の proc ベースな ps プログラムを元にして、 top を大幅に書き換えた。 Michael Shields <mjshield@nyx.cs.du.edu> は多くの変更を行い、 セキュアモード・累積モードを追加し、全般的な整理を行った。 Tim Janik <timj@gtk.org> は年齢順ソートと、 特定のプロセスを ID を用いて監視する機能を追加した。 Helmut Geyer <Helmut.Geyer@iwr.uni-heidelberg.de> は大きな変更を行い、フィールド設定のサポート・新しいオプションの追加・ コードの整理・新しい readproc インターフェースの利用機能の追加を行った。 "b" オプションと "n" オプションは George Bonser <george@captech.com> から CapTech IT Services のために寄贈された。 Michael K. Johnson <johnsonm@redhat.com> が現在のメンテナである。 バグ報告は <procps-bugs@redhat.com> まで送って欲しい。