Linuxで作業をしていて「今動いているプロセスは何だろう?」と疑問に思ったことはありませんか。
サーバーが重くなったとき、アプリケーションが反応しなくなったとき、原因を探るためにまず知っておくべきがプロセス管理です。
その最初の一歩として役立つのが、psコマンドです。普段なんとなく使っている人も多いかもしれませんが、実はオプションの組み合わせ次第で「誰がどのプロセスを動かしているのか」「どれくらいのCPUやメモリを消費しているのか」まで細かく把握できます。
システム管理や障害対応に直結するコマンドだけに、使いこなせるかどうかで対応力は大きく変わります。
本記事では、psコマンドの基本から実践的な活用法までを整理し、プロセス管理を始める第一歩を具体的に解説していきます。
Linuxの基礎知識 🔵 プロセス・サービス系
📌 サービスを安定稼働させるためのプロセス管理と制御の基本
└─【Linuxの基礎知識】プロセス・サービス系でよくあるトラブルと解決の入口
├─ 【Linuxの基礎知識】プロセス管理はもうスクリプト不要?systemdの基本と自動監視設定
├─ 【Linuxの基礎知識】psコマンドの実践活用|プロセス管理の第一歩
├─ 【Linuxの基礎知識】kill / killall / timeoutの違いと正しい使い分け
├─ 【Linuxの基礎知識】カーネルの役割と起動プロセスをわかりやすく解説!
└─ 【Linuxの基礎知識】ファイルディスクリプタとulimitを理解する
psコマンドとは
Linuxを使う上で、現在動いているプロセスを確認する機会は多くあります。
プロセスはシステムやアプリケーションの動作単位であり、その状態を把握することは安定した運用に直結します。psコマンドは、これらのプロセスを一覧表示し、必要な情報を取り出すための基本コマンドです。
ここでは、psコマンドの概要や役割、そして他の監視コマンドとの違いを整理して解説します。
psコマンドの基本概要
psコマンドは「process status」の略で、実行中のプロセス情報を取得するための標準的なコマンドです。
オプションを組み合わせることで、実行ユーザーやCPU使用率、メモリ使用量、実行中のコマンド名など多様な情報を確認できます。
Linuxを学ぶ上で最初に習得するべきコマンドの一つであり、障害対応や運用監視において欠かせない存在です。
ps
上記のように単純に実行すると、現在のシェルで動作しているプロセスのみを表示します。
プロセス管理でpsを使う目的
システム運用において、プロセス管理は欠かせない作業です。
サーバーが高負荷になった際やサービスが停止した際に、どのプロセスが原因なのかを特定するためにpsコマンドが利用されます。また、ユーザーごとの実行状況や不要なプロセスの確認など、システム全体の健全性を把握する手段としても重要です。
psで確認したPID(プロセスID)は、killコマンドなどでプロセスを制御するときにも利用されます。
ps -ef
上記はシステム全体のプロセスを詳細に一覧表示する例で、最も多用される形式のひとつです。
psコマンドと他の監視コマンドの違い
psコマンドは瞬間的なプロセス情報を表示するのに適しています。
一方、topやhtopのようなコマンドは動的に変化するプロセスの状態をリアルタイムに確認できます。また、sarコマンドは長期的なリソース使用状況を記録・分析することに向いています。
つまり、psは「いまこの瞬間の状態」を静的に確認するのに適したコマンドであり、用途に応じて他のコマンドと併用することで、より正確なシステム監視やトラブルシュートが可能になります。
| コマンド | 特徴 |
|---|---|
| ps | 現在のプロセスを静的に一覧表示 |
| top | CPUやメモリ使用率をリアルタイムで監視 |
| htop | topの強化版で視覚的にわかりやすい表示 |
| sar | 長期的なリソース使用状況を記録・分析 |
psが収集できる情報の種類
psコマンドでは、単にプロセス一覧を表示するだけでなく、プロセスIDや実行ユーザー、親子関係、CPU使用時間、メモリ利用状況、実行コマンド名など多様な情報を取得できます。
これにより、どのユーザーがどのプロセスを動かしているのか、どのプロセスがリソースを消費しているのかを確認でき、トラブルシュートやシステム運用において迅速な判断が可能になります。
| 列名 | 取得できる情報 | 例 |
|---|---|---|
| PID | プロセスID(管理番号) | 3434180 |
| TTY | 関連付けられた端末(?はなし、ptsはSSHなど) | pts/0 |
| TIME | CPU使用時間(累計) | 00:07:44 |
| CMD | 実行しているコマンド名 | python, bash |
サーバー性能監視にsarを使うメリット
sarコマンドはサーバーのリソース利用状況を時系列で収集し、履歴として残すことができます。psコマンドが「今この瞬間のプロセス情報」を確認するのに適しているのに対し、sarは「過去から現在までの利用傾向」を把握できるのが大きな特徴です。
これにより、障害発生時にその瞬間の状態だけでなく、発生前からの負荷傾向やリソースの推移を確認でき、問題の根本原因を特定しやすくなります。また、定期的な性能分析にも利用できるため、サーバーのボトルネック把握やキャパシティプランニングにも有効です。
psコマンドの導入手順
psコマンドはLinuxの標準環境に含まれており、追加でインストールする必要はありません。ほとんどのディストリビューションでは、最初から利用可能な状態になっています。
そのため、導入というよりは「どの環境で利用できるか」を理解しておくことが重要です。ここでは標準環境での利用について説明します。
標準環境での利用(追加インストール不要)
psコマンドは多くのLinux環境において、デフォルトで用意されているprocpsパッケージの一部として提供されています。
つまり、特別な準備をしなくても利用できるのが特徴です。もし利用できない場合は、パッケージが削除されている可能性があるため、再インストールを行います。
ps --version
このコマンドでバージョンが表示されれば、psコマンドはすでに利用可能です。もし「コマンドが見つかりません」と表示された場合は、RHEL系であれば以下のようにしてprocpsパッケージを導入できます。
yum install -y procps-ng
Debian系の場合は以下のコマンドで導入します。
apt-get install -y procps
このようにpsコマンドは基本的に標準で利用できますが、万が一削除されている場合でもパッケージをインストールするだけで簡単に復旧できます。
psコマンドの基本的な使い方
psコマンドはオプションを組み合わせることで、必要な情報を効率よく取得できます。
以下に代表的なオプションと利用例をまとめます。
| 目的 | オプション | 意味 | 利用例 |
|---|---|---|---|
| プロセスID(PID)の確認 | -e -o pid,cmd | 全プロセスのPIDとコマンドを表示 | 監視対象のPIDを取得 |
| 実行ユーザー(UID)の確認 | -e -o user,pid,cmd | プロセス実行ユーザーを表示 | どのユーザーが実行しているか調査 |
| 親子プロセス(PPID)の確認 | -ef | フルフォーマット表示(UID, PID, PPIDなど) | 親子関係や起動経路を調査 |
| CPU使用率の確認 | aux --sort=-%cpu | CPU使用率の高い順に表示 | 高負荷プロセスを特定 |
| メモリ使用率の確認 | aux --sort=-%mem | メモリ使用率の高い順に表示 | メモリ消費の大きいプロセスを特定 |
| 実行コマンド(CMD)の確認 | -e -o pid,cmd | PIDと実行コマンドを表示 | プロセスの正体やオプションを確認 |
psコマンドはLinuxで実行中のプロセスを調べるための基本的なコマンドです。オプションを指定することで、対象範囲や表示する情報を柔軟に切り替えることができます。ここでは最もよく利用される基本操作を整理しながら紹介します。
プロセス一覧の表示(psのみ)
psコマンドをオプションなしで実行すると、現在のシェルで動作しているプロセスを確認できます。非常にシンプルな出力ですが、まずは基本動作を理解するのに役立ちます。
ps
この場合、現在のターミナルに紐づいたプロセスのみが表示されます。
ユーザー別のプロセス表示(ps -u)
特定のユーザーが実行しているプロセスを確認したい場合には、-uオプションを指定します。これにより対象ユーザーのプロセス一覧と詳細が表示されます。
例えば「ps -u root」と指定すれば、rootユーザーのプロセスを確認することが可能です。
ps -u ユーザー名
出力例;
PID TTY TIME CMD
34189 ? 00:00:00 systemd
34192 ? 00:00:00 (sd-pam)
98616 ? 00:07:44 python
98740 ? 00:07:50 python
131996 ? 00:07:50 python
3434179 ? 00:00:00 sshd
3434180 pts/0 00:00:00 bash
詳細情報の表示(ps -f, ps -l)
プロセスの親子関係や起動時刻などを確認したい場合には、-f または -l オプションを指定します。
- -f は「フルフォーマット」を意味し、親プロセスID(PPID)や開始時刻(STIME)、実行コマンド(CMD)までを表示します。
- -l は「ロングフォーマット」で、優先度やスケジューリング関連の情報が追加されます。
ps -f
例えば、下記のような出力結果が得られます。
UID PID PPID C STIME TTY TIME CMD
root 95743 4175050 0 12:31 pts/0 00:00:00 ps -f
root 4174937 3434180 0 10:34 pts/0 00:00:00 su -
root 4175050 4174937 0 10:34 pts/0 00:00:00 -bash
この情報から「SSHでログイン(sshd)→ suでユーザー切り替え → bashが起動」という親子関係が見えます。また、STIME列を見ることでプロセスがいつから動作しているかを把握でき、サービスの再起動タイミングや不審なログインを確認する手がかりになります。
このように、ps -f や ps -l は単なる一覧表示ではなく、プロセスの背景や動作状況を把握するために役立ちます。障害調査やセキュリティチェックにおいて重要な手がかりとなるため、覚えておくと便利です。
すべてのプロセスを表示(ps -e, ps aux)
システム全体のプロセスを確認するには、-e または aux を指定します。両方とも全プロセスを表示しますが、出力形式に違いがあります。-e はUNIX形式、aux はBSD形式であり、用途に応じて使い分けられます。
| コマンド | 形式 | 特徴 |
|---|---|---|
| ps -e | UNIX形式 | シンプルな一覧表示。稼働中のサービスを確認するのに便利 |
| ps aux | BSD形式 | CPUやメモリの使用率などリソース情報を確認できる |
ps -e
出力例:
PID TTY TIME CMD
1 ? 00:00:05 systemd
721 ? 00:00:00 sshd
735 ? 00:00:00 crond
812 ? 00:01:12 python
1045 ? 00:00:00 httpd
1078 ? 00:00:00 httpd
1090 ? 00:00:00 mysqld
2503 pts/0 00:00:00 bash
2521 pts/0 00:00:00 ps -e
- PID と CMD が中心でシンプル
- どのサービス(systemd, sshd, crond, httpd, mysqld など)が稼働しているか把握できる
- 端末に紐づかないサービスは ?、SSH接続したユーザーのシェルは pts/0 でわかる
| 列名 | 意味 | 利用例 |
|---|---|---|
| UID | プロセスの実行ユーザー | 不審なユーザーが動かしていないか確認 |
| PID / PPID | プロセスID / 親プロセスID | プロセスの階層関係を調査 |
| STIME | プロセスの開始時刻 | サービスの起動タイミングを確認 |
| CMD | 実行コマンド | プロセスの正体を把握 |
ps aux
出力例:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 167936 9348 ? Ss Sep01 0:05 systemd
root 721 0.0 0.0 71120 5184 ? Ss Sep01 0:00 sshd
root 735 0.0 0.0 57280 3120 ? Ss Sep01 0:00 crond
apache 1045 0.3 1.2 272000 49800 ? S 11:20 1:12 httpd
mysql 1090 2.0 5.4 841232 221000 ? Sl 11:21 7:50 mysqld
bepro 2503 0.0 0.0 26720 5540 pts/0 Ss 12:30 0:00 bash
bepro 2521 0.0 0.0 38720 2100 pts/0 R+ 12:31 0:00 ps aux
- %CPU, %MEM が表示されるのでリソース使用状況が一目でわかる
- STAT でプロセス状態(S=スリープ、R=実行中、Z=ゾンビなど)が確認できる
- VSZ(仮想メモリサイズ), RSS(実メモリ使用量) でプロセスのメモリ負荷を把握できる
- プロセスがいつから動いているか(START列)もわかる
| 列名 | 意味 | 利用例 |
|---|---|---|
| USER | プロセスを実行しているユーザー | 不審なユーザーがプロセスを動かしていないか確認 |
| PID | プロセスID | killコマンドで終了するときに指定 |
| %CPU | CPU使用率 | CPUを占有しているプロセスを特定 |
| %MEM | メモリ使用率 | メモリを消費しているプロセスを特定 |
| VSZ | 仮想メモリ使用量(KB) | メモリ消費が大きいプロセスを確認 |
| RSS | 常駐メモリ使用量(KB) | 実際に物理メモリをどれだけ使用しているかを確認 |
| TTY | 制御端末 | ログイン端末やバックグラウンド動作を確認 |
| STAT | プロセス状態(R=実行中、S=待機中、Z=ゾンビなど) | 応答がないプロセスやゾンビを調査 |
| START | プロセスの開始時刻 | サービスやジョブがいつ起動したか確認 |
| TIME | CPU累積使用時間 | 長時間CPUを使用しているプロセスを把握 |
| COMMAND | 実行コマンド | プロセスの正体や起動パラメータを確認 |
使い分け
- プロセスの存在を確認するだけなら ps -e
- リソース負荷を把握したいなら ps aux
子プロセスの確認(--forestオプション)
プロセスの親子関係をより直感的に確認したい場合には、--forestオプションを利用します。通常のpsコマンドではPIDとPPIDを確認して関係性を追いますが、--forestを指定するとツリー形式で表示され、親から子プロセスの流れが一目で分かります。
ps -ef --forest
出力例:
root 1 0 0 08:00 ? 00:00:01 systemd
├─sshd 1024 1 0 08:01 ? 00:00:00 sshd: root@pts/0
│ └─bash 1050 1024 0 08:01 pts/0 00:00:00 -bash
│ └─vim 1102 1050 0 08:05 pts/0 00:00:01 vim
└─crond 1120 1 0 08:02 ? 00:00:00 crond
このように階層構造が視覚的に示されるため、「どのプロセスがどの親から派生しているか」を容易に確認できます。特にサービスが複数の子プロセスを生成する場合や、どのシェルからアプリケーションが起動されたかを追跡する際に役立ちます。
子プロセスの関係を把握することで、不要なプロセスが残っていないか、ゾンビプロセスが発生していないかといったトラブルシュートに応用できます。
BSD形式とUNIX形式の違い(aux と -ef の比較)
LinuxのpsコマンドにはBSD形式とUNIX形式の2つの書き方が存在します。どちらも同じ目的で利用されますが、表示フォーマットやオプションの記述方法に違いがあります。
ps aux
ps -ef
下記のように、表示内容や列名に違いが出ます。
| 形式 | コマンド例 | 特徴 |
|---|---|---|
| BSD形式 | ps aux | ハイフンなしで指定、ユーザーやCPU・メモリ使用率がわかりやすい |
| UNIX形式 | ps -ef | ハイフン付きで指定、親子関係(PPID)や起動時刻を重視 |
状況に応じて使い分けることで、より効率的にプロセスの状態を把握できます。
なぜ引数に「-(ハイフン)」あり・なしが存在するのか?
psコマンドには「ハイフンあり」と「ハイフンなし」の2種類の書き方が存在します。これは間違いではなく、歴史的な背景によって生まれた違いです。
もともとUNIXにはSystem V系とBSD系という大きな流派があり、それぞれの文化をLinuxが引き継いだため、現在のLinuxでは両方の書き方が利用できます。
ハイフンありの「ps -ef」はSystem V系の形式で、親子関係(PPID)や起動時刻を確認するのに適しています。一方、ハイフンなしの「ps aux」はBSD系の形式で、CPU使用率やメモリ使用率を含んだ情報が見やすく表示されます。
| 種類 | 書き方 | 由来 | 特徴 |
|---|---|---|---|
| UNIX形式 | ps -ef | System V系 | 親子関係や起動時間を重視 |
| BSD形式 | ps aux | BSD系 | CPUやメモリ使用率を重視 |
実務においては、プロセスの階層や制御を確認したい場合には「ps -ef」を、リソース使用状況を重点的に把握したい場合には「ps aux」を使うと効率的です。Linuxではどちらも利用できるため、目的に応じて使い分けることがポイントです。
psコマンドによる応用・拡張
psコマンドは単発での利用にとどまらず、cronやログ保存の仕組みと組み合わせることで長期的な監視や分析に活用できます。
ここではpsコマンドを用いた監視やログ管理の方法について整理します。
長期監視(設定ファイルやcron)
psコマンドは通常「その瞬間のプロセス状況」を表示しますが、cronに登録して定期的に実行させることで長期的な監視データを収集できます。あらかじめスクリプトに記録処理を組み込み、一定間隔で実行するのが一般的です。
*/5 * * * * ps -ef >> /var/log/ps_monitor.log
この例では5分ごとに全プロセスの一覧を取得し、ログファイルに追記しています。これにより、障害が発生した時間帯にどのプロセスが稼働していたかを後から確認できます。
ログ管理/保存期間
長期監視のために取得したpsコマンドのログは、肥大化しやすいため管理が必要です。保存期間をあらかじめ決め、古いファイルは削除またはローテーションする仕組みを導入することで、ディスク容量を無駄に消費せずに運用できます。
logrotate /etc/logrotate.d/ps_monitor
logrotateを利用すれば、日次や週次でログを分割し、自動的に古いファイルを削除する設定が可能です。
ディレクトリ構成や保存場所
psコマンドのログを保存する際は、システム全体のログと混在させず、専用のディレクトリを設けるのが望ましいです。管理しやすい構成の一例を示します。
| ディレクトリ | 用途 |
|---|---|
| /var/log/ps/ | psコマンドの監視ログを格納する専用ディレクトリ |
| /var/log/ps/ps_monitor.log | 定期的に収集したプロセス一覧のログ |
| /etc/logrotate.d/ps_monitor | logrotateによるログローテーション設定 |
このように専用の保存先を用意し、ローテーション設定を組み合わせることで、長期的にプロセス監視データを蓄積しながら安定した運用が可能になります。
psコマンドの実践的な活用例
psコマンドは単にプロセスの状態を確認するだけでなく、トラブルシュートや障害発生時の切り分けにも活用できます。ここでは代表的な利用方法と調査手順の具体例を解説します。
トラブルシュートや切り分け手順
サーバーに障害が発生した場合、どのリソースが問題を引き起こしているのかを特定することが重要です。psコマンドを使うことで、CPUやメモリを大量に消費しているプロセスを確認でき、原因の切り分けを迅速に行えます。
ps aux --sort=-%cpu | head -5
出力例:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
apache 12145 85.2 2.1 273600 87432 ? R 12:01 12:34 httpd
mysql 11932 75.0 5.4 812432 220000 ? S 11:58 10:45 mysqld
root 11890 3.1 0.3 72000 12456 pts/0 S 11:55 0:15 ps
…
このようにCPU使用率が異常に高いプロセスを特定すれば、サーバーの過負荷がアプリケーション由来かどうかを即座に切り分けられます。
特定の利用シーン
運用現場では「サービスが応答しない」「アプリケーションが停止している」などの状況でpsコマンドを利用します。特定のプロセスが存在するかどうかを調べ、異常停止していれば即時再起動やさらなる調査につなげられます。
ps -ef | grep httpd
出力例:
root 1045 1 0 11:20 ? 00:00:01 /usr/sbin/httpd
apache 1078 1045 0 11:20 ? 00:00:00 /usr/sbin/httpd
apache 1080 1045 0 11:20 ? 00:00:00 /usr/sbin/httpd
上記のように複数のhttpdプロセスが確認できれば、Webサーバーは稼働していると判断できます。プロセスが見つからなければ、サービス停止が原因と特定できます。
他ツールとの組み合わせ
psコマンドは瞬間的な情報を得るのに適していますが、リアルタイム監視や長期分析には不向きです。そのため、topやsarなどのコマンドと組み合わせて活用することが効果的です。
| ツール | 特徴 | psとの併用メリット |
|---|---|---|
| top | リアルタイムでCPUやメモリ利用率を監視 | 異常を検知した後にpsで詳細プロセスを確認 |
| sar | 長期的なリソース使用状況を記録 | リソース異常が発生した時間帯にpsでプロセスを追跡 |
| grep | 特定のプロセスを検索 | psと組み合わせて特定サービスの稼働確認を効率化 |
このように、psコマンドを単体で使うのではなく、他の監視コマンドやフィルタリング機能と組み合わせることで、より実践的なトラブルシュートが可能になります。
psコマンド利用時の注意点
psコマンドはシステム運用に欠かせない基本コマンドですが、利用にあたっては注意すべき点もあります。特
にログの取り扱いや性能への影響、そして運用現場で陥りやすい落とし穴を理解しておくことで、安定した監視とトラブルシュートが可能になります。
ログ容量の管理
psコマンドの出力を定期的にログとして保存すると、ディスク容量を圧迫する原因になります。
特に全プロセスを出力する「ps -ef」や「ps aux」を短い間隔で記録すると、数日で数百MBからGB単位のログが生成されることもあります。そのため、logrotateを利用して古いログを自動的に削除する仕組みを導入することが重要です。
logrotate /etc/logrotate.d/ps_monitor
このようにローテーション設定を行うことで、ディスク容量を効率的に管理できます。
性能への影響
psコマンドはprocファイルシステムから情報を収集するため、基本的には軽量ですが、大量のプロセスを処理する環境では出力の取得にCPU負荷がかかる場合があります。
特に高頻度でcron実行している場合、監視そのものがシステム負荷を増加させる原因となり得ます。利用間隔は数分おき程度に抑え、必要以上に高頻度での実行を避けることが推奨されます。
運用上の落とし穴
psコマンドの出力はあくまで「その瞬間の状態」であり、長期的な傾向分析には向いていません。
そのため、異常が断続的に発生する場合やピーク時の負荷を調べたい場合には、psコマンドだけでは原因を特定できないことがあります。
また、grepで特定のプロセスを検索する際に、検索コマンド自身も出力に含まれてしまう点も誤解を招きやすい落とし穴です。
ps -ef | grep httpd | grep -v grep
このようにgrep自身を除外する工夫を取り入れることが求められます。psコマンドは便利ですが万能ではないため、必要に応じてtopやsarなどの他ツールと組み合わせて利用することが重要です。
まとめ
psコマンドはLinuxのプロセス管理において欠かせない基本コマンドであり、現在動作しているプロセスの確認やリソース利用状況の把握に役立ちます。PIDやUID、PPIDを調べることでプロセスの特定や親子関係を確認でき、%CPUや%MEMの情報を利用することで高負荷の原因となるプロセスを迅速に切り分けられます。
また、cronと組み合わせて定期的にログを取得すれば長期的な監視も可能ですが、ログ容量の肥大化や瞬間的な情報しか取得できないといった制約があるため、logrotateや他の監視ツールとの併用が欠かせません。
実務では、ps単体での利用に加えてtopやsarなどのツールと組み合わせることで、障害発生時の切り分けやボトルネック特定を効率的に行うことができます。基本的な使い方を押さえ、運用上の注意点を理解することで、psコマンドをより効果的に活用できるようになります。
次のおすすめ記事
実践環境を整える
ここまで学んだ知識を実際に試すには、Linuxを動かす環境が必要です。手軽に始めるならVPSを利用するのがおすすめです。
→ VPS徹底比較!ConoHa・さくら・Xserverの選び方
VPSを利用してLinux環境を準備したら、実際の設定は下記の記事が参考になります。
→ VPSに開発環境を自動構築する方法|Apache+Tomcat+PostgreSQL




