# kpm ハンドブック

Mario
Weilguni

    mweilguni@kde.org

バージョン 1.3k1, 1998 年 2 月 2 日

このハンドブックは kpm 1.3k1 について説明しています。kpm は プロセスの情報表示と管理のためのユーティリティです。

KPm ハンドブック

KDE
KPm
process manager
top

## 全般に関する情報

### kpm とは何か?

kpm を使うと、あなたの Linux コンピュータのプロセスを見たり 変更したりすることができます。kpm は実行中のプロセス、RAM のような コンピュータ資源、CPU 利用、システム運転時間等の詳細な情報を表示 します。あなたはプロセスを強制終了したり、優先順位を変更したりする ことができます。スーパーユーザで kpm を起動すれば、スケジューリング の設定を変更することもできるようになります。

### 法的事項

kpm の大部分は Mattias Engdegård 氏の `qps` が元になっています。kpm と qps の主な違いは KDE インターフェースです。 kpm は KDE 標準の多くに準拠していて、KDE 設定ファイルを採用し、 セッション管理機能を備えています。qps の機能の一部は取り除かれて います(例えば Mac OS7 スタイルのテーブル表示機能や、専用の チェックボックス ウィジェット)。

qps (同様に kpm も) GNU 一般公有使用許諾書 (GNU GPL) に基づき 発行されています。

### kpm の要件

- Linux オペレーティング システム 2.0 またはそれ以上。kpm は Linux の `/proc` ファイルシステムを 多用しています。残念ながら、kpm は他のシステムに移植することが できません。なぜならば UNIX システムはそれぞれ独自の仕組みでプロセス の情報を収集するらしいからです。

- K デスクトップ環境 ベータ2 またはそれ以上。

- Qt 1.31. KDE は Qt をベースにしているため、これは問題ない でしょう。

- Linux カーネルが `proc` ファイルシステムのサポートありでコンパイルされていること。 これがないと top のようなプログラムが動きもしませんから、多くの カーネルで標準になっています。

## メニュー

### ウィンドウ メニュー

アイコン化

  メイン ウィンドウをアイコン化します。アイコン化すると、プロセス リストを更新する必要がなくなるため、CPU 使用時間がずっと少なくなります。 ウィンドウ マネージャに KWM を使用していてオプションの「パネルに格納」 がチェックされている時には、kpanel に小さなアイコンが現れて、平均 システム負荷が表示されます。fvwm 等、他のウィンドウ マネージャでは、 kpm のアイコン自身が負荷を表示します(ただしこれはウィンドウ マネージャ の設定によります)。

終了

  kpm を終了します(メイン ウィンドウを閉じた場合も同じです)。

### プロセス メニュー

Renice

  マークしたプロセス(の全て)の優先順位を変更することができます。 Linux においては、プロセスは -20 (最高)から +20 (最低)の間の優先順位 (nice 値)を持ちます。したがって nice 値を増加 させるとプロセスに与えられる CPU 時間は 少なくなります。スーパーユーザで なければ nice 値を下げる(優先順位を上げる)ことはできません。この ことは、普通のユーザでは、以前 nice 値を上げたプロセスであっても 後で nice 値を下げることはできないことを意味します。

  もちろん優先順位の変更は自分の所有するプロセスについてのみ 許されています。スーパーユーザは全てのプロセスの優先順位を変更する ことができ、優先順位を下げることもできます。

スケジューリングを変更

  このオプションは root のみ利用可能です。 「スケジューリングの変更」ダイアログを使って、スーパーユーザは 選択したプロセスのスケジューリング方針を変更することができます (Linux 2.0.x カーネルに組み込まれている POSIX.1b リアルタイム 拡張機能を使用しています)。通常のプロセスは SCHED&lowbar;OTHER に 設定されていて、静的に優先順位 0 が与えられています。(ソフト) リアルタイム プロセスの方針は SCHED&lowbar;FIFO または SCHED&lowbar;RR に 設定されていて、静的に 1 から 99 までの優先順位が与えられて います。

ソケットインフォ

  選択したプロセスの TCP、UDP ソケットのリストを表示します。

### シグナル メニュー

シグナル メニューでは、マークした全てのプロセスに各種の シグナルを送ることができます。この操作は、特に 2 個以上の プロセスをマークしている場合は注意してください。 Linux の標準シグナルはここで 説明しています。

### ビュー メニュー

プロセスリストを更新

  直ちにプロセスリストを更新します。これは更新周期を長めに 取っている時に大変有用です。同じことがツールバーのボタンか スペース キーを押すことにより行われます。

すべてのプロセス

  全てのプロセスを表示します。

あなたのプロセス

  あなたのプロセスを表示します。別のユーザとして実行させて いるもの (すなわちあなたが起動した SETUID root プログラム) も 含まれます。

rootでないプロセス

  root により起動されたもの以外の全てのプロセスを表示します。

実行中のプロセス

  実行中のプロセスのみを表示します。(実行中あるいは実行キュー にあるもの)

ユーザフィールド

  プロセス リストに重要なプロセス フィールドを表示します。 これは "top" が普通表示するものです。

ジョブフィールド

  ジョブ制御に関連する主なフィールドを表示します。

メモリフィールド

  メモリ使用、ページ フォールト等の情報を表示します。

## kpm メイン ウィンドウ

### フィールドの説明

PID - プロセス ID

  各プロセスは固有のプロセス ID 番号を持っています。プロセス ID は 1 から始まり数が大きくなっていきます。新しいプロセスが生成 されると、次の未使用の PID が割り当てられます。PID は(現状では) 16 ビットの符号つき整数であり、したがって 32767 で最初に戻ります。 これは通常動作ですから心配する必要はありません。

PPID - 親プロセス ID

  各プロセスには 1 個の親プロセスがあります。例外はプロセス 1 (init)で、これはプロセス階層の頂点にあり、親はありません。

PGID - プロセス グループ ID

  各プロセスはいずれかのプロセス グループに属しています。 プロセス グループはシグナルの分配に使われたり、端末の入力要求を 調停したりするのに使用されます。端末と同じプロセス グループの プロセスはフォアグラウンドに置かれ入力ができる状態を与えられます。 他のプロセスは、入力しようとした時にシグナルでブロックされます。

SID - セッション ID

  セッション ID は主に、端末の回線断時の動作を決定するのに 使用されます。

TTY - 制御端末

  制御端末 (tty) は通常そのプロセスを起動したデバイス (シリアル ポートや pty 等)で、プロセスの入出力に使用されます。 全てのプロセスが制御端末を持っているわけではありません。kpm は /dev ディレクトリを調べて端末の名前を特定しようとしますが、 失敗することもあります。スペースを節約するため、端末名の末尾の 2 文字のみが表示されます(/dev/ttyp6 は p6 と表示されます)。

TPGID - 端末を所有するプロセス グループ ID

  使用中の端末はプロセスによって所有されています。ここには そのプロセスの PGID が表示されます。

USER - プロセス所有者

  これはプロセスを所有する(実)ユーザ名です。実効ユーザ ID と 実ユーザ ID が異なる場合は、そのことが後続の "*" あるいは "+" に よって示されます。アスタリスクは実効ユーザがスーパーユーザである 時に使われます(これは普通バイナリが root に set-uid されている ことを表します)。

NICE - タイム シェアリングの優先順位

  nice 値はプロセスが実効を許可される頻度とタイムスライスの 長さを決定します。この値は -20 から 20 の範囲にあり、0 がデフォルト です。低い値ほどプロセスに多くの CPU 時間が割り当てられます。 スーパーユーザのみが nice 値を下げることができます。

PRI - 次回のタイムスライスの長さ

  これはプロセスに与えられる次のタイムスライスの最大長を表します (実行中のプロセスについては、現在のタイムスライスの残りを表します)。 この数値は -20 から 20 までの範囲にスケールし直されています。小さい 値ほどタイムスライスが長いことを表します。

PLCY - スケジューリング方針

  FIFO (F) と ラウンド ロビン (R) はリアルタイム スケジューリング 方針です。その他 (O) は通常の UNIX タイム シェアリング方針です。 F および R のプロセスは 1 から 99 の間のリアルタイム優先順位が 割り当てられています。あるプロセスは上位の優先順位に実行可能な プロセスがない時に実行されます。ラウンド ロビン プロセスは 1 タイムスライスの長さの間実行され、その後同じ優先順位のキューの 末尾に置かれます。FIFO プロセスは(スリープやブロッキングのために) CPU 時間を明け渡すまで、もしくは上位の優先順位のプロセスに 遮られるまで、実行が続けられます。スーパーユーザ (root) のみが、 スケジューリング方針を変更することができます。

RPRI - リアルタイム優先順位

  リアルタイム プロセス (FIFO や ラウンド ロビン) は、1 から 99 までの優先順位を持っています。あるプロセスは、それより優先順位の 低い他のプロセスを退けます。通常のタイム シェアリング プロセス (方針 O)は、この優先順位が 0 です。スーパーユーザ (root) のみが リアルタイム優先順位を変更することができます。

MAJFLT - メジャー フォールトの発生回数

  ページ フォールトはプロセスが RAM 上に存在しないメモリ ページの 読み書きをしようとする時に発生します。メジャー ページ フォールトは ディスク アクセスが生じる場合で、例えばメモリ ページをスワップ イン、アウトする場合です。

MINFLT - マイナー フォールトの発生回数

  ページ フォールトはプロセスが RAM 上に存在しないメモリ ページの 読み書きをしようとする時、あるいは書き込みできないページに書き込みを しようとした場合に発生します。マイナー フォールトはディスク アクセス の生じない場合で、例えばコピー オン ライトの共有ページに書き込みを 行う場合です。

TRS - テキスト常駐セット サイズ (キロバイト)

  これは現在 RAM 上に存在するプロセスのテキスト(すなわち実行 コード)のサイズです。

DRS - データ常駐セット サイズ (キロバイト)

  これは現在 RAM 上に存在するプロセスのデータ(実行コード以外 の部分)のサイズです。

SIZE - プロセスの仮想イメージ サイズ (キロバイト)

  これはプロセスのイメージの合計サイズです。これには全ての コード、データ、プロセスが使用している共有ライブラリが、スワップ アウトされているページまで含まれています。

SWAP - スワップ デバイス上のサイズ (キロバイト)

  これは単に SIZE と RSS の差で、プロセスのどれだけの部分が ディスク上に存在するかを表しています。

RSS - 常駐セット サイズ (キロバイト)

  これはプロセスの実際に RAM に存在する部分(コードおよびデータ) の、共有ライブラリを含めた値です。これはプロセスが使用している RAM の量の正当な概算値を与えています。

SHARE - 共有メモリ (キロバイト)

  これはプロセスが他のプロセスと共有するメモリの量を示します。 この部分は実際に他のプロセスによって使われているとは限らず、 単に使うことができる、というだけです。

DT - ダーティ ページの数

  これは前回ディスクへ書き込みが行われてから変更が行われた RAM 上のページの数(バイト数ではありません)を表します。ダーティ ページは解放したり他の用途で使用する前にディスクに書き込まれる 必要があります。

STAT - プロセスの状態

  プロセスは常に、次のいずれかの状態になっています:

  - R (実行): プロセスが CPU で実行中あるいは実行可能。

  - S (休眠): プロセスがイベントの発生(入出力やタイマー等)を待機中。

  - D (割り込み不可の休眠): プロセスがイベントの発生を待機していて 割り込みを掛けることができない(通常デバイス ドライバ内での待機)。

  - T (停止): プロセスが停止中、あるいは他のプロセスにトレース されている。

  - Z (ゾンビ): プロセスが終了したが、まだその死を親に見取られていない。

  - プロセスが完全にスワップ アウトしている(常駐ページがない) 時には、このフィールドに 'W' が表示されます。(これはカーネル プロセスでも同じです。例えば kswapd。)

FLAGS - プロセス フラグ (16進)

  ここにはプロセスの状態に関する追加情報が入っています。 詳細は Linux のカーネル ソースを参照してください。

WCHAN - プロセスがスリープ中の関数

  プロセスが何か起こるのを待機している時、ここには 止まっている所のカーネル関数が表示されます。(頭の do&lowbar; や sys&lowbar; は 短くするために省略されます。)

UID - ユーザ IDの数値表示

  これはプロセスを所有する(実)ユーザの ID です。

&percnt;WCPU - 重みつき CPU 使用率

  これはプロセスが使用している CPU 時間のパーセンテージを 最近 30 秒間にわたって(重みを指数的に減らした)平均を取った ものです。

&percnt;CPU - 前回更新後の CPU 使用率

  これは前回 kpm のプロセス テーブルを更新してから、どれだけ CPU 時間が使用されたかを示します。

&percnt;MEM - メモリ使用率

  これはプロセスが RAM のどれだけの部分を占有しているか(常駐量) を表しています。共有ライブラリも計算に入っていますから、誇張 された数値です。

START - プロセス開始時刻

  プロセスが生成された時刻です。

TIME - 使用 CPU 時間計

  プロセスが開始してからどれだけの CPU 時間を使用したかを示します。

COMM - プロセスを起動したコマンド

  プロセスを開始した時のコマンド(ファイル名)です。長い名前は 短く切られます。

CMDLINE - プロセスを起動したコマンド ライン

  プロセスを起動したコマンドラインで引数も含まれています。 オプション メニューで「コマンドのパスを表示」が選択していないと、 コマンド名の前に書かれたパスは省略されます。スワップ アウト されたプロセスはコマンド名を括弧でくくっただけの表示になります。 (これはカーネル プロセスでも同様です。)

## 付録

### UNIX シグナル

ここでは signal(7) マニュアル ページで説明されているシグナルを紹介します。詳細に ついては、次のコマンドでマニュアル ページを引いてください。

`man 7 signal`

次のシグナルは POSIX で定義されていて、kpm から送ることが できます。

- SIGHUP: 制御端末の回線断または制御プロセスの死

- SIGINT: キーボードからの割り込み

- SIGQUIT: キーボードからの中止

- SIGILL: 不当な命令

- SIGABRT: abort(3) からの中止シグナル

- SIGFPE: 浮動小数点例外

- SIGKILL: 強制終了シグナル

- SIGSEG: 無効なメモリ参照

- SIGPIPE: 壊れたパイプ: 読み出すプロセスがないパイプへの書き込み

- SIGALRM: alarm(1) からのタイマー シグナル

- SIGTERM: 終了シグナル

- SIGUSR1: ユーザ定義シグナル 1

- SIGUSR2: ユーザ定義シグナル 2

- SIGCHLD: 子プロセスの停止または終了

- SIGCONT: 停止していたプロセスの続行

- SIGSTOP: プロセスの停止

- SIGTSTP: 端末からの停止入力

- SIGTTIN: バックグラウンド プロセスに対する端末入力

- SIGTTOU: バックグラウンド プロセスに対する端末出力

次のシグナルは POSIX で定義されていません。(今の所) kpm から利用す ることもできません。

- SIGTRAP: トレース/ブレークポイント トラップ

- SIGIOT: IOT トラップ。SIGABRT と同義

- SIGBUS: バス エラー

- SIGSYS: ルーチンへの誤った引数 (SVID)

- SIGSTKFLT: コプロセッサのスタック フォールト

- SIGURG: ソケットの緊急事態 (4.2BSD)

- SIGIO: 入出力可能の通知 (4.2 BSD)

- SIGPOLL: SIGIO と同義 (System V)

- SIGCLD: synonym for SIGCHLD

- SIGXCPU: CPU タイム 制限超過 (4.2 BSD)

- SIGXFSZ: ファイル サイズ制限超過 (4.2 BSD)

- SIGVTALRM: 仮想アラーム クロック (4.2 BSD)

- SIGPROF: プロファイル アラーム クロック

- SIGPWR: 電源異常 (System V)

- SIGINFO: SIGPWR と同義

- SIGLOST: ファイル ロックが失われた

- SIGWINCH: ウィンドウ サイズ変更シグナル (4.3 BSD, Sun)

- SIGUNUSED: 未使用のシグナル

### 既知のバグ、問題

- 2 個以上のプロセスを選択している状態でリストが更新されると、 kpm がセグメンテーション違反で死ぬことがあります。原因の手がかりが ありません...

- 情報バー、プロセス リスト本体は 12pt フォントに合わせて あります。14 pt までのフォントならきちんとして見えますが、それ より大きくなるととても汚くなります。

- 更新周期が短すぎると、kpm は CPU 資源を大量に消費します。 私のシステム (AMD K6PR200) では、更新周期 1 秒の時、CPU 時間の およそ 5 % を消費します。これはプロセスの総数によって大きく 変化します(表示されている以外の物を含む全てのプロセス)。これより ずっと大きくなることもあります。

- 更新周期が非常に短い場合は、タイマーの粒度のために %CPU の 値が正確ではありません。

- プロセスが `System.map` の外 (例えば、カーネル モジュール)でスリープしている時には、WCHAN フィールドは正しくありません。このとき、`System.map`内の最後のエントリが表示されます。 (`&lowbar;end`のように)。

- kpm は同一の PID を持つ複数のプロセスを取り扱うことが できません。これは clone() システム コールで CLONE&lowbar;PID を使用 した時に発生します。