カテゴリ: Linux 更新日: 2026/02/18

Linuxプロセス確認ガイド!ps・topコマンドで動いているプログラムを調べる方法

Linuxで現在動いているプロセスを確認する方法
Linuxで現在動いているプロセスを確認する方法

先生と生徒の会話形式で理解しよう

生徒

「Linuxを使っていると、パソコンが重くなった気がするんです。今、裏側で何が動いているか調べる方法はありますか?」

先生

「それは『プロセス』を確認すればわかりますよ。Linuxには実行中のプログラムを一覧表示するコマンドがいくつか用意されています。」

生徒

「プロセス?何だか難しそうな言葉ですね…。初心者でも簡単に確認できるんでしょうか?」

先生

「大丈夫です。Windowsの『タスクマネージャー』のようなものだと思えば怖くありません。基本的なコマンドの使い方を順番に見ていきましょう。」

1. プロセスとは何?初心者向けに解説

1. プロセスとは何?初心者向けに解説
1. プロセスとは何?初心者向けに解説

Linuxを操作する上で避けて通れないのが「プロセス」という概念です。一言でいうと、プロセスとは「現在実行されているプログラム」のことです。

例えば、あなたがブラウザを開いてこの記事を読んでいるとき、コンピュータの中ではブラウザというプログラムが「プロセス」として動いています。また、音楽を聴いていれば音楽再生ソフトが、文章を打っていればエディタが、それぞれプロセスとして存在しています。私たちが直接目に見えるものだけでなく、Linuxがシステムを維持するために裏側でこっそり動かしている「デーモン」と呼ばれるプロセスもたくさんあります。

パソコンの動作が遅いと感じる時は、特定のプロセスがCPU(コンピュータの頭脳)やメモリ(作業机)を独占してしまっていることが多いのです。そのため、どのプロセスがどれくらい資源を使っているかを確認するスキルは、Linux管理の第一歩となります。

2. 今動いているものを一覧表示する「ps」コマンド

2. 今動いているものを一覧表示する「ps」コマンド
2. 今動いているものを一覧表示する「ps」コマンド

Linuxで現在動いているプロセスを確認する最も基本的なコマンドがps(プロセス・ステータス)です。このコマンドを打ち込むと、その瞬間に動いているプロセスのスナップショット、つまり「写真」を撮るように表示してくれます。

まずは、何もオプションを付けずに実行してみましょう。


ps
  PID TTY          TIME CMD
 1234 pts/0    00:00:00 bash
 5678 pts/0    00:00:00 ps

結果に出てきた「PID」はプロセスIDという識別番号で、プロセス一つひとつに割り振られた背番号のようなものです。「TTY」はどの端末で動いているか、「TIME」はどれくらいCPUを使ったか、「CMD」は実行されているコマンド名を表しています。

3. すべてのプロセスを詳しく見る「aux」オプション

3. すべてのプロセスを詳しく見る「aux」オプション
3. すべてのプロセスを詳しく見る「aux」オプション

先ほどのpsコマンドだけでは、自分が今使っている端末のプロセスしか表示されません。システム全体の様子を知るには、特別なオプションを組み合わせて使うのが一般的です。特によく使われるのがauxという組み合わせです。

ここで使われる「a」は他のユーザーのプロセスも含める、「u」は実行したユーザー名などの詳細を表示する、「x」は画面(端末)に紐付いていないバックグラウンドのプロセスも表示するという意味を持っています。これらを繋げて実行してみましょう。


ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1 168324  9820 ?        Ss   Jan01   0:02 /sbin/init
linuxuser 2045  0.5  2.3 892400 45200 ?        Sl   10:00   0:15 /usr/bin/python3
linuxuser 3120  0.0  0.1  15664  3280 pts/0    R+   11:05   0:00 ps aux

非常に多くの情報が出てきましたね。%CPUはCPUの使用率、%MEMはメモリの使用率を表しています。これで「どのプログラムがパソコンを重くしている犯人か」を見つけることができます。

4. リアルタイムで状況が変わる「top」コマンド

4. リアルタイムで状況が変わる「top」コマンド
4. リアルタイムで状況が変わる「top」コマンド

psコマンドは実行した瞬間の情報しか分かりませんが、刻一刻と変わる状況を監視したい場合はtopコマンドを使います。これは、数秒おきに情報を自動で更新して表示してくれる便利なツールです。

実行すると、画面全体がプロセスのリストで埋め尽くされます。


top
top - 11:10:05 up 1 day, 2:30, 1 user, load average: 0.05, 0.03, 0.01
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 :   3931.1 total,   1250.5 free,    850.2 used,   1830.4 buff/cache
...(中略)...
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 2045 linuxuser 20   0  892400  45200  21000 S   0.7   1.1   0:20.45 python3
 1022 root      20   0       0      0      0 I   0.3   0.0   0:05.12 kworker/u4:1

この画面では、一番上にシステムの全体像(メモリの空き容量など)が表示され、その下に個別のプロセスが並びます。デフォルトでは「CPUをたくさん使っている順」に並んでいるので、負荷の原因をすぐに見つけることができます。終了したいときは、キーボードの「q」を押してください。これで元の黒い画面(プロンプト)に戻れます。

5. 特定のプロセスだけを探す「grep」との組み合わせ

5. 特定のプロセスだけを探す「grep」との組み合わせ
5. 特定のプロセスだけを探す「grep」との組み合わせ

ps auxを実行すると、何百行ものデータが表示されてしまい、目的のプログラムを探すのが大変です。そんな時は「パイプ(|)」という記号を使って、文字を検索するgrepコマンドと組み合わせるのがLinuxの定番テクニックです。

例えば、「python」に関連するプロセスだけを抜き出したい場合は、以下のように入力します。パイプ記号は「前のコマンドの結果を、後ろのコマンドに渡す」という橋渡しのような役割をします。


ps aux | grep python
linuxuser 2045  0.5  2.3 892400 45200 ?        Sl   10:00   0:15 /usr/bin/python3
linuxuser 3155  0.0  0.0  12100  2500 pts/0    S+   11:15   0:00 grep --color=auto python

このように絞り込むことで、特定のアプリケーションが二重に起動していないか、フリーズしていないかなどをピンポイントでチェックできるようになります。

6. 特権ユーザーでしか見られないプロセスの情報

6. 特権ユーザーでしか見られないプロセスの情報
6. 特権ユーザーでしか見られないプロセスの情報

Linuxには「一般ユーザー」と「ルート(root)ユーザー」という2種類の立場があります。ルートユーザーはコンピュータの全ての権限を持つ「管理者」です。システム全体に関わる重要なプロセスや、他のユーザーが実行している詳細な情報を操作したい場合は、ルート権限が必要になることがあります。

一般ユーザーでは制限がかかるような詳細情報を表示する際、管理者として実行してみましょう。通常はsudoというコマンドを頭に付けて実行します。パスワードを求められたら、自分のパスワードを入力してください。


sudo ps -eF
UID        PID  PPID  C    SZ   RSS PSR STIME TTY          TIME CMD
root         1     0  0 42081  9820   0 Jan01 ?        00:00:02 /sbin/init
root         2     0  0     0     0   1 Jan01 ?        00:00:00 [kthreadd]

-eFオプションを使うと、プロセスの親子の関係(どのプログラムがどのプログラムを起動したか)や、どのCPUコアを使っているかといった、より高度なシステム情報まで丸裸にできます。

7. プロセスの親子関係を視覚的に見る「pstree」

7. プロセスの親子関係を視覚的に見る「pstree」
7. プロセスの親子関係を視覚的に見る「pstree」

Linuxのプロセスは、実は「親」が「子」を産むように次々と作られていきます。例えば、ターミナル(親)の中でコマンド(子)を実行するという具合です。この繋がりを家系図のようにツリー形式で見せてくれるのがpstreeコマンドです。

文字だけで表現された樹形図が表示されるので、システムの構造が直感的に理解しやすくなります。


pstree
systemd-+-accounts-daemon---3*[{accounts-daemon}]
        |-cron
        |-dbus-daemon
        `-sshd---sshd---bash---pstree

一番左にあるsystemd(またはinit)が、全てのプロセスのご先祖様にあたります。そこから枝分かれして、様々な機能が動いているのが一目瞭然ですね。プログラミングで自動実行の仕組みを作るときなどは、この親子関係を意識することがとても重要になります。

8. ジョブ管理との違いを知っておこう

8. ジョブ管理との違いを知っておこう
8. ジョブ管理との違いを知っておこう

「プロセス」と似た言葉に「ジョブ」というものがあります。これもプログラムの実行単位ですが、少し視点が違います。プロセスが「OS(システム全体)から見た実行単位」であるのに対し、ジョブは「シェル(操作画面)から見た作業の単位」です。

例えば、大きなファイルをコピーしている間に別の作業をしたいとき、実行中のコマンドを一時停止(Ctrl+Z)してバックグラウンドに回すことがあります。このとき、現在その画面で抱えている作業リストを確認するのがjobsコマンドです。


jobs
[1]+  Stopped                 vim memo.txt

これは、一つの部屋(端末)の中で、いくつの作業を同時並行で進めているかを管理するようなものです。プロセスは大きな工場の全体管理、ジョブは自分の机の上の整理整頓、というイメージで使い分けると分かりやすいでしょう。初心者の方は、まずは「プロセス」をマスターして、全体の動きを把握できるようになることを目指してください。

カテゴリの一覧へ
新着記事
New1
RDS(データベース)
AWS RDSのメンテナンスウィンドウの設定方法を解説!初心者でもできるクラウドデータベースの管理
New2
Direct Connect(専用線接続)
AWS Direct Connectのルーティング設計(BGP設定の基本)を初心者向けにやさしく解説
New3
S3(オブジェクトストレージ)
AWS S3のデータ保護(オブジェクトロック・WORM設定)を初心者向けにやさしく解説
New4
ファイル・ディレクトリ構造
Linuxのディレクトリ構造を徹底解説!/bin・/sbin・/usrの違いと役割を初心者向けに解明
人気記事
No.1
Java&Spring記事人気No1
S3(オブジェクトストレージ)
AWS S3の料金体系をわかりやすく解説
No.2
Java&Spring記事人気No2
シェルとターミナル基礎
findコマンドの使い方を完全ガイド!初心者でもわかるLinuxのファイル検索の基本
No.3
Java&Spring記事人気No3
AWS 基本
AWSのサービスのステータス確認方法(AWS Health Dashboard)
No.4
Java&Spring記事人気No4
プロセス・ジョブ管理
LinuxのプロセスID(PID)とは?仕組みと管理方法を初心者向けに徹底解説
No.5
Java&Spring記事人気No5
ELB(ロードバランサー)
AWS ELBでターゲットグループを設定する方法を初心者向けに解説!
No.6
Java&Spring記事人気No6
ファイル・ディレクトリ構造
Linuxの/homeディレクトリとは?役割と構造を初心者向けに徹底解説!
No.7
Java&Spring記事人気No7
シェルとターミナル基礎
findコマンドの使い方を完全ガイド!初心者でもわかるLinuxのファイル検索の基本
No.8
Java&Spring記事人気No8
RDS(データベース)
AWS RDSのセキュリティグループ設定方法を解説!初心者でも安心のクラウドデータベース対策