---
source_url: https://peteris.rocks/blog/htop/
source_title: "htop explained"
source_site: "peteris.rocks"
hero_image: https://peteris.rocks/blog/htop/canyoukillit-before.png
tags: linux,system-administration,process-management
generated_at: 2026-07-04T16:01:39.817Z
model: claude-haiku-4-5
---
# htop の理解: Linux プロセス管理と システムモニタリング

htop などの診断ツールが参照する Linux の /proc ファイルシステムとプロセス管理の詳細な解説。

lead は以下の通り:

htop、top、ps などのシステムモニタリングツールが表示するメトリクスは、Linux の /proc ファイルシステムから取得されている。ロードアベレッジ、プロセス状態、メモリ使用量といった各種情報が何を意味するのかを理解することで、システムの動作をより正確に診断できる。

## ロードアベレッジの計算と意味

ロードアベレッジは /proc/loadavg ファイルから取得され、システムロードの平均値を表す。この値は、実行中（実行可能状態）のプロセスと割り込み不可能スリープ状態のプロセスを数えることで計算される。/proc/loadavg の最初の 3 列は、過去 1 分、5 分、15 分間のロードアベレッジをそれぞれ示す。

ロードアベレッジは指数減衰移動平均で計算されており、Linux カーネルのソースコード (kernel/sched/loadavg.c) には以下のように記述されている:

> 「This file contains the magic bits required to compute the global loadavg figure. Its a silly number but people think its important. We go through great pains to make it work on big machines and tickless kernels.」

ロードアベレッジ 1.0 は、シングルコアマシンでは CPU 利用率 100% を意味するが、2 コアマシンの場合は 50% に相当する。2 コアマシンが CPU 100% で稼働している場合、ロードアベレッジは 2.0 となるとみられる。

## プロセスと /proc ファイルシステム

すべてのプロセス関連情報は /proc/<pid>/ ディレクトリに格納されている。プロセスを起動するとき、bash シェルは fork システムコールで新しいプロセスを作成し、exec システムコールでプログラムをロードする。/proc/<pid>/cmdline はプロセス起動時のコマンド、exe リンクは実行バイナリ、cwd リンクはカレントワーキングディレクトリを指している。

プロセスは親プロセスから子プロセスとして生成され、htop で F5 キーを押すことでプロセスの階層構造が表示される。プロセス ID は通常増加し続け、使い果たされない限り再利用されることはない。プロセス ID 1 は /sbin/init で、システム起動時に最初に開始される。

## プロセスの状態と所有

Linux では複数のプロセス状態が存在する: R（実行中または実行可能）、S（割り込み可能スリープ）、D（割り込み不可能スリープ）、Z（ゾンビ）、T（ジョブコントロール信号で停止）、t（デバッガで停止）、X（終了）。

各プロセスはユーザーに所有されており、ユーザーは数値 ID で表現される。id コマンドを使用してユーザー ID から名前を確認でき、この情報は /etc/passwd と /etc/group から取得される。Name Service Switch（NSS）設定ファイル /etc/nsswitch.conf によって名前解決に使用するファイルが指定されている。

実行時には、実行ファイルの所有者がプログラム実行ユーザーでなくても、プログラムは実行ユーザーで実行される。別のユーザーとして、特に root 権限で実行する場合は sudo を使用する。/etc/sudoers ファイルは visudo コマンドで編集すべきである。実行ファイルに setuid ビット（s）が設定されていると、そのファイルの所有者として実行されるようになる。

## シグナルとプロセス制御

シグナルはプロセスを割り込むための数値で、プロセスに送信できる。一般的なシグナルは INT、KILL、STOP、CONT、HUP で、通常大文字で SIG プレフィックス付きで記述される。SIGINT はシグナル 2（ターミナル割り込み信号）、SIGKILL はシグナル 9（強制終了）である。bash では kill は組み込みコマンドだが、ほとんどのシステムに /bin/kill も存在する。

プログラム作成時にシグナルハンドラを設定できる。これはプロセスがシグナルを受け取ったときに呼び出される関数である。割り込み不可能スリープ状態のプロセスはシグナルで唤起できない。通常、ディスク読み書きやページフォルト後にこの状態になる。割り込み不可能プロセスはシグナルを処理できないため割り込むことができず、Network File System（NFS）の読み書きが時間がかかる場合、プロセスはこの状態になる。mount コマンドで intr オプションを使用すると割り込み可能な状態で実行できる。

## パスワード管理とファイルアクセス

パスワードは /etc/shadow ファイルに格納され、$6$ で始まる場合は sha512 ハッシュアルゴリズムが使用されている。ハッシュ化されたパスワードは、レインボーテーブル攻撃から保護するため salt で処理されている。/etc/shadow ファイルは root のみが書き込み可能である。

プロセスが終了してもまだ子プロセスがある場合、その子プロセスはゾンビプロセスになるとされる。

*この記事は元記事の事実のみに基づいて自動生成されました。*

## 出典
peteris.rocks、「htop explained」、https://peteris.rocks/blog/htop/
