閉じる

【Bash】psとtopコマンドは何が違う?目的別の使い分け方を分かりやすく解説

LinuxやUnix系システムを管理する際、プロセスの稼働状況を確認することは非常に重要な業務の一つです。

Bashなどのシェルを通じてシステムの状態を把握するための標準的なツールとして、psコマンドとtopコマンドが挙げられます。

これら二つのコマンドは、どちらも「プロセス情報を表示する」という点では共通していますが、その動作原理や利用目的は大きく異なります。

初心者のうちはどちらを使えばよいか迷うことも多いですが、それぞれの特性を理解することで、システムトラブルの解決スピードは飛躍的に向上します。

本記事では、psコマンドとtopコマンドの具体的な違いから、実務での使い分け、さらには詳細なオプションの使い方まで詳しく解説します。

psコマンド:実行した瞬間の状態を切り出すスナップショット

psコマンドは、「Process Status」の略称であり、その名の通りプロセスの状態を表示するためのコマンドです。

このコマンドの最大の特徴は、実行した瞬間のプロセスのスナップショットを表示するという点にあります。

一度実行すると、その時点の情報を出力してすぐに終了するため、情報の更新は行われません。

そのため、特定のプロセスが現在動作しているかを確認したり、スクリプト内でプロセスIDを取得したりする場合に非常に適しています。

psコマンドの主な役割とメリット

psコマンドを利用する主なメリットは、出力が静的であるため、テキスト処理ツールとの相性が抜群に良いことです。

例えば、grepコマンドと組み合わせることで、膨大なプロセスの中から特定のプログラムだけを抽出することが容易になります。

また、psコマンドは多くのオプションを備えており、表示する項目を細かくカスタマイズできる柔軟性を持っています。

特定のユーザーが実行しているプロセスのみを表示したり、メモリ使用量順に並べ替えたりすることも可能です。

psコマンドの基本的な使い方

実務で最も頻繁に利用されるのは、システム上の全プロセスを表示するオプションです。

以下に、BSD形式でよく使われるauxオプションの実行例を示します。

Shell
# システム全体のプロセスを詳細に表示する
ps aux
実行結果
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.1 168668 11988 ?        Ss   10:00   0:02 /sbin/init
user       1234  0.5  0.5 712340 45600 ?        Sl   10:05   0:15 /usr/bin/python3 app.py

出力結果の%CPUはCPU使用率を、%MEMは物理メモリの使用率を示しています。

また、PIDはプロセスを識別するための固有の番号であり、プロセスを強制終了するkillコマンドなどで利用します。

topコマンド:システムの健康状態を常に監視するリアルタイムツール

一方で、topコマンドはシステムの稼働状況をリアルタイムで継続的に監視するためのツールです。

コマンドを実行すると専用の画面が表示され、一定時間(デフォルトでは3秒程度)ごとに情報が自動的に更新されます。

これにより、CPU使用率が急上昇した瞬間や、メモリ消費が徐々に増えていく様子を視覚的に捉えることができます。

システム全体の負荷状況を俯瞰的に把握したい場合には、まずtopコマンドを実行するのが定石です。

topコマンドの主な役割とメリット

topコマンドの利点は、単なるプロセス一覧だけでなく、システム全体の統計情報が画面上部に表示される点にあります。

「ロードアベレージ」や「CPUの待機時間(wa)」、「スワップ領域の使用状況」などが一目で確認できます。

また、実行中にキーボード操作を行うことで、表示内容を動的に変更できるインタラクティブな機能も備えています。

例えば、特定のキーを押すだけで、CPU使用率順からメモリ使用量順にソートを切り替えることが可能です。

topコマンドの基本的な使い方

引数なしで実行すると、標準的なモニタリング画面が起動します。

Shell
# リアルタイムモニタリングを開始する
top
実行結果
top - 12:40:05 up 2 days,  3:15,  1 user,  load average: 0.05, 0.12, 0.09
Tasks: 120 total,   1 running, 119 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.5 us,  0.5 sy,  0.0 ni, 98.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   7950.5 total,   3210.2 free,   2150.8 used,   2589.5 buff/cache
MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.   5500.1 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
   4567 user      20   0  950234  85420  32100 S   2.3   1.1   0:45.12 node
   1234 user      20   0  712340  45600  12500 S   0.7   0.6   0:15.02 python3

画面上部のload averageは、システム全体の負荷を表す重要な指標です。

数値が高い場合は、CPUの処理待ちやI/O待ちが発生していることを示唆しています。

psとtopの決定的な違いと使い分けのポイント

両者の違いを理解するために、主要な要素を表にまとめました。

比較項目psコマンドtopコマンド
表示形式静的(スナップショット)動的(リアルタイム更新)
主な用途特定のプロセスの特定、スクリプト利用システム全体の負荷監視、異常検知
リソース消費非常に低い継続的に実行するため、わずかに消費
操作性コマンド引数で制御実行中のキー入力で制御
パイプ利用可能(grep, awkなど)不向き(バッチモードが必要)

どちらを使うべきかの判断基準

具体的な使い分けの基準として、「何を探しているか」によって判断するのが最も効率的です。

もし、特定のアプリケーションの名前が分かっており、そのPIDを調べてプロセスを終了させたいなら、psコマンドが適しています。

一方で、「なぜかサーバーが重い」「どのプロセスが原因か分からないがリソースが枯渇している」という場合は、topコマンドを立ち上げるべきです。

実務では、まずtopで原因となっているプロセスのアタリを付け、その後psで詳細な情報を取得するという流れが一般的です。

実務で役立つpsコマンドの応用的な使い方

psコマンドは、オプションの組み合わせ次第で非常に強力な調査ツールになります。

Linux標準のps -efと、BSD形式のps auxはどちらも全プロセスを表示しますが、表示される項目が若干異なります。

-eは全てのプロセスを、-fは完全なフォーマット(親子関係など)を表示することを意味します。

特定のプロセスを検索する

最も一般的なパターンは、パイプを利用して特定の文字列を含むプロセスを絞り込む方法です。

Shell
# nginxに関連するプロセスのみを表示する
ps aux | grep nginx
実行結果
root      1024  0.0  0.1  45600  8200 ?        Ss   May10   0:00 nginx: master process /usr/sbin/nginx
www-data  1025  0.1  0.2  46100  9500 ?        S    May10   5:20 nginx: worker process

この手法は、プログラムの多重起動を防ぎたい場合や、設定変更後の再起動を確認する場合に非常に便利です。

ツリー形式で親子関係を確認する

プロセスがどのプロセスから生成されたのか(親子関係)を知りたい場合は、fオプションや--forestオプションを使用します。

Shell
# プロセスの親子関係をツリー状に表示する
ps axjf

これにより、例えばApacheやNginxのマスタープロセスがどのワーカープロセスを管理しているのかが視覚的に分かりやすくなります。

topコマンドを使いこなすためのインタラクティブ操作

topコマンドを実行中に特定のキーを押すことで、情報の見せ方を瞬時に切り替えることができます。

これを知っているだけで、障害調査の効率は劇的に向上します。

並べ替え(ソート)の変更

デフォルトではCPU使用率順に並んでいますが、メモリ消費が激しいプロセスを探したい場合は以下の操作を行います。

  • M (Shift + m):メモリ使用率(%MEM)順にソートします。
  • P (Shift + p):CPU使用率(%CPU)順にソートします。
  • T (Shift + t):累積実行時間(TIME+)順にソートします。

特にメモリリークが発生している疑いがあるときは、Mキーでのソートが欠かせません。

その他の便利な操作

表示されている情報の密度を変えたり、特定のプロセスに色を付けたりすることも可能です。

  • 1:マルチコアCPUの場合、各コアごとの使用率を表示します。
  • u:特定のユーザーのプロセスのみを表示するようフィルタリングします。
  • k:topの画面上から直接プロセスを終了(kill)させます。
  • q:topコマンドを終了します。

2026年のシステム管理におけるモダンな選択肢

Bash標準のpsやtopは非常に強力ですが、2026年現在のモダンな環境では、より視認性の高い代替ツールも普及しています。

その代表格がhtopbtopです。

これらのツールは、topコマンドの機能を拡張し、マウス操作のサポートやグラフ表示による直感的なインターフェースを提供します。

Shell
# htopをインストールして実行する(Ubuntu/Debian例)
sudo apt install htop
htop

htopでは、プロセスの終了や優先度の変更がファンクションキーで簡単に行えるため、オペレーションミスを減らす効果も期待できます。

ただし、これらのツールは標準でインストールされていないことが多いため、どのような環境でも確実に使えるpsとtopの習得はエンジニアにとって必須のスキルと言えます。

まとめ

Bash環境におけるプロセス管理の基本である、psコマンドとtopコマンドの違いについて解説しました。

psコマンドは、「今の状態」を切り取って詳細に分析したり、他のコマンドと連携したりするための静的なツールです。

対してtopコマンドは、「刻々と変わる状態」をリアルタイムに監視し、システムのボトルネックを特定するための動的なツールです。

どちらが優れているかという問題ではなく、目的に応じてこれらを適切に使い分けることが重要です。

「特定のPIDを調べたいときはps」「全体の負荷を監視したいときはtop」という基本を念頭に置き、日々のサーバー管理に役立ててください。

これらのコマンドを自由に操れるようになれば、トラブル発生時にも冷静かつ迅速に対応できるプロフェッショナルなスキルが身につくはずです。

URLをコピーしました!