Ubuntuのプロセス管理コマンド【ps/kill/top完全ガイド】

コマンド



Ubuntuを使っていると、「このコマンド、まだ動いてる?」「重いプロセスを止めたい」という場面が必ずやってきます。プロセス管理の基本は pstopkill の3コマンドに集約されており、これを押さえればサーバー運用の土台が固まります。

本記事では Ubuntu 24.04 LTS の Docker 公式イメージ(ubuntu:24.04)を実際に起動し、コマンドの実出力を取得しました。「なんとなく使えてたけど意味がわかっていなかった」という方にも、出力の読み方から丁寧に解説します。

この記事のポイント

  • ps aux で全プロセスを一覧表示、ps -ef で親子関係まで確認できる
  • top はリアルタイム更新のプロセスモニター。top -bn1 でスクリプト内にも使える
  • kill PID は特定のプロセスを終了、pkill 名前 は名前で一括終了できる
  • Ubuntu 24.04 の procps は 4.0.4 にメジャーアップグレードされており、22.04(3.3.17)とオプション挙動が一部異なる
  • pgrep でPIDを調べてから kill するのが安全な手順

目次

  1. プロセスとは何か
  2. ps コマンドの使い方
  3. top コマンドの使い方
  4. kill コマンドの使い方
  5. pgrep・pkill で名前からプロセスを操作する
  6. Ubuntu 22.04 vs 24.04 のバージョン差
  7. よくあるエラーと解決策
  8. まとめ

検証環境

本記事のコマンドはすべて Ubuntu 24.04 LTS(Docker公式イメージ ubuntu:24.04、procps-ng 4.0.4)で実行した実出力を掲載しています(2026-06-13 計測)。

プロセスとは何か

プロセス(process)とは、OS上で実行中のプログラムの1インスタンスのことです。Ubuntuを起動した瞬間から、シェル・systemd・各種サービスなど何十〜何百ものプロセスが裏で動いています。

各プロセスには PID(Process ID) と呼ばれる一意な整数が割り当てられ、OSはこれを使って各プロセスを管理します。PID 1 は必ず systemd(または init)が占有します。

プロセスの状態(STAT列)には主に以下の種類があります:

STAT 意味 よく見るケース
R 実行中(Running) CPUを使っている・使う準備ができている
S スリープ中(Sleeping) I/O待ち・タイマー待ち(通常の状態)
D 割り込み不可スリープ ディスクI/O待ち中。長く続くと問題のサイン
Z ゾンビ(Zombie) 終了済みだが親プロセスが回収していない
T 停止(Stopped) Ctrl+Z でバックグラウンドに回したプロセス

ps コマンドの使い方

ps(process status)はプロセスのスナップショット(瞬間の状態)を表示するコマンドです。実行した瞬間の情報を返し、その後は更新されません。

手順1:ps aux で全プロセスを確認する

最もよく使うのが ps aux です。Ubuntu 24.04(procps-ng 4.0.4)での実出力がこちらです:




ubuntu@linuxlab: ~
$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.1 0.0 4032 3028 ? Ss 09:29 0:00 bash
root 138 0.0 0.0 2268 756 ? S 09:29 0:00 sleep 60
root 139 0.0 0.0 2268 760 ? S 09:29 0:00 sleep 60
root 140 0.0 0.0 2268 764 ? S 09:29 0:00 sleep 60
root 141 0.0 0.0 7628 3200 ? R 09:29 0:00 ps aux
ps aux 実行結果(Ubuntu 24.04 LTS 実測)
ps aux 実行結果(Ubuntu 24.04 LTS 実測)

各列の意味を整理すると:

  • USER: プロセスを実行しているユーザー
  • PID: プロセスID(プロセスの識別番号)
  • %CPU: CPUの使用率(%)
  • %MEM: メモリの使用率(%)
  • VSZ: 仮想メモリサイズ(KB)
  • RSS: 実際の物理メモリ使用量(KB)
  • STAT: プロセスの状態(S=スリープ, R=実行中, など)
  • TIME: 累積CPU使用時間

手順2:ps -ef で親子関係を確認する

Unix形式の ps -ef を使うと、PPID(親プロセスID)列が表示され、プロセスの親子関係がわかります。




ubuntu@linuxlab: ~
$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 09:29 ? 00:00:00 bash
root 138 1 0 09:29 ? 00:00:00 sleep 60
root 139 1 0 09:29 ? 00:00:00 sleep 60
root 140 1 0 09:29 ? 00:00:00 sleep 60
root 141 1 0 09:29 ? 00:00:00 ps -ef

この出力から、PID 138〜140(sleep コマンド)はすべて PPID=1 の bash から起動されたことが読み取れます。

手順3:CPUやメモリ順にソートする

重いプロセスを素早く見つけるには --sort オプションが便利です:




ubuntu@linuxlab: ~
$ ps aux –sort=-%cpu | head -5
# CPU使用率の高い順に表示(先頭の – は降順の意味)
$ ps aux –sort=-%mem | head -5
# メモリ使用量の高い順に表示
ps コマンドの主要オプション一覧
ps コマンドの主要オプション一覧

top コマンドの使い方

topリアルタイムでプロセス情報を更新表示するモニタリングツールです。デフォルトでは約3秒ごとに画面を更新します。

手順1:top を起動してヘッダーを読む

Ubuntu 24.04 で top -bn1(バッチモード、1回だけ実行)を実行した結果です:




ubuntu@linuxlab: ~
$ top -bn1 | head -12
top – 09:29:43 up 1 min, 0 user, load average: 7.13, 2.30, 0.81
Tasks: 5 total, 1 running, 4 sleeping, 0 stopped, 0 zombie
%Cpu(s): 58.8 us, 3.9 sy, 0.0 ni, 33.3 id, 0.0 wa, 0.0 hi, 3.9 si
MiB Mem : 11963.1 total, 9825.4 free, 1178.5 used, 1508.2 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 10784.6 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 4032 3028 2784 S 0.0 0.0 0:00.00 bash
139 root 20 0 2268 760 684 S 0.0 0.0 0:00.00 sleep
141 root 20 0 8488 4360 2488 R 0.0 0.0 0:00.00 top
top -bn1 実行結果(Ubuntu 24.04 LTS 実測)
top -bn1 実行結果(Ubuntu 24.04 LTS 実測)

ヘッダー各行の意味:

  • load average: 7.13, 2.30, 0.81:直近1分・5分・15分の平均ロード(CPU待ちプロセス数)。CPUコア数を超えると過負荷のサインです
  • %Cpu(s): 58.8 us:ユーザープロセスがCPUの58.8%を使用中
  • 33.3 id:CPUがアイドル(空き)状態の割合。0%に近い場合は過負荷

手順2:top の主要キーバインド

対話モード(top を引数なしで起動)中に使える主要キーです:

キー 動作
q 終了
P CPU使用率順にソート(デフォルト)
M メモリ使用量順にソート
k PIDを入力してプロセスをkillする
1 CPUコアを個別表示(マルチコア確認に便利)

手順3:top -bn1 でスクリプトから使う

シェルスクリプトや cron から定期的にプロセス状態をログに残したいときは、-b(バッチモード)と -n 1(1回だけ実行)を組み合わせます:




ubuntu@linuxlab: ~
$ top -bn1 | grep nginx
# nginx プロセスのみ抽出
$ top -bn1 -p $(pgrep nginx) 2>/dev/null
# 特定PIDだけ表示(-p オプション)

kill コマンドの使い方

kill コマンドは、プロセスにシグナル(信号)を送るコマンドです。「kill」という名前ですが、デフォルトでは SIGTERM(終了要求)を送るだけで、プロセスを即座に強制終了するわけではありません。

手順1:kill -l でシグナル一覧を確認する




ubuntu@linuxlab: ~
$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM

よく使うシグナル:

  • SIGTERM (15):終了要求(デフォルト)。プロセスは後処理してから終了できる
  • SIGKILL (9):強制終了。プロセスは拒否できず即座に終了(最終手段)
  • SIGHUP (1):設定ファイルのリロード要求。nginx や sshd などで使う

手順2:プロセスを終了させる




ubuntu@linuxlab: ~
$ sleep 100 &
[1] 7
$ kill 7
# SIGTERM(15)を送信。デフォルトのシグナル
$ kill -9 7
# SIGKILL(9)を送信。終了しない場合の最終手段
$ kill -SIGTERM 7
# シグナル名で指定することもできる

注意:kill -9 は最終手段

kill -9(SIGKILL)はプロセスが後処理(ファイルの保存・ロックファイルの削除など)を行う機会を与えずに強制終了します。データが壊れることもあるので、まず kill PID(SIGTERM)を試してから使ってください。

pgrep・pkill で名前からプロセスを操作する

PIDがわからないとき、毎回 ps aux | grep nginx でPIDを探すのは面倒です。pgreppkill を使えば、プロセス名から直接操作できます。

pgrep でPIDを調べる

Ubuntu 24.04 で実際に確認した結果(procps-ng 4.0.4):




ubuntu@linuxlab: ~
$ sleep 200 & sleep 200 &
[1] 9
[2] 10
$ pgrep sleep
9
10
$ pgrep -l sleep
9 sleep
10 sleep
pgrep・pkill・kill コマンドの実演(Ubuntu 24.04 LTS 実測)
pgrep・pkill・kill コマンドの実演(Ubuntu 24.04 LTS 実測)

pkill で名前指定の一括終了




ubuntu@linuxlab: ~
$ pkill sleep
# sleep という名前の全プロセスに SIGTERM を送信
$ pgrep sleep || echo ‘[sleepプロセスなし: 全て終了]’
[sleepプロセスなし: 全て終了]

pkill は慎重に

pkill nginx とすると、その名前に部分一致するすべてのプロセスが対象になります。意図しないプロセスを終了させないよう、事前に pgrep -l nginx でどのプロセスが対象になるか確認してから実行する習慣をつけましょう。

Ubuntu 22.04 vs 24.04 のバージョン差

procps パッケージのバージョンが Ubuntu のバージョンによって異なります。Docker で両方の実環境を起動して実際に確認しました:

procpsバージョン比較 Ubuntu 22.04 vs 24.04(実測)
procpsバージョン比較 Ubuntu 22.04 vs 24.04(実測)
項目 Ubuntu 22.04 LTS Ubuntu 24.04 LTS
procpsパッケージ 2:3.3.17-6ubuntu2.1 2:4.0.4-4ubuntu3.2
procps-ng バージョン 3.3.17 4.0.4
ps –version ps from procps-ng 3.3.17 ps from procps-ng 4.0.4
LTS サポート期限 2027年4月 2029年4月

重要な変更点として、procps-ng 4.x では top の設定ファイル形式や一部オプションが変更されています。22.04 から 24.04 にアップグレードした際に top の挙動が変わって戸惑うケースがあるので注意してください。

よくあるエラーと解決策

①「command not found: ps」が出る

最小構成のDockerイメージや Alpine Linux では ps コマンドが入っていないことがあります。




ubuntu@linuxlab: ~
$ ps aux
bash: ps: command not found
$ sudo apt-get install -y procps
# procps パッケージで ps・top・kill・pgrep がまとめてインストールされる

②「No such process」と表示されてkillできない

PIDが間違っている、またはプロセスがすでに終了しています。




ubuntu@linuxlab: ~
$ kill 99999
bash: kill: (99999) – No such process
$ pgrep nginx
# まず pgrep で現在の PID を確認してから kill する

③「Operation not permitted」でkillできない

他のユーザーが起動したプロセスは、root権限なしでは終了できません。




ubuntu@linuxlab: ~
$ kill 1234
bash: kill: (1234) – Operation not permitted
$ sudo kill 1234
# sudo を付けて root 権限で実行する

④ゾンビプロセスが増える

ゾンビプロセス(STAT=Z)は、子プロセスが終了しているのに親プロセスが終了ステータスを回収していない状態です。




ubuntu@linuxlab: ~
$ ps aux | grep ‘Z’
# ゾンビプロセスを確認
$ ps -ef | grep defunct
# defunct(機能停止)と表示されたらゾンビプロセス

ゾンビプロセス自体にリソースはほぼ使われませんが、大量に発生する場合は親プロセスに問題がある可能性があります。親プロセスを再起動すると解消されることが多いです。

まとめ

Ubuntuのプロセス管理の基本コマンドをまとめると:

  • ps aux:全プロセスをスナップショット表示。%CPU・%MEM列でリソースを把握
  • ps -ef:PPID(親プロセスID)も表示。プロセスツリーの確認に
  • top:リアルタイム更新のモニター。load average でサーバー負荷を一目確認
  • top -bn1:バッチモード1回実行。スクリプトから呼び出せる
  • kill PID:SIGTERM(終了要求)を送る。通常はこれで十分
  • kill -9 PID:SIGKILL(強制終了)。応答しないプロセスの最終手段
  • pgrep 名前:プロセス名からPIDを検索
  • pkill 名前:プロセス名で一括終了(実行前に pgrep で確認)

なお、今回の検証環境(Ubuntu 24.04、procps-ng 4.0.4)は Docker コンテナを使いましたが、本格的にLinuxサーバーを運用したいならVPSを借りるのがおすすめです。自分のサーバーがあれば systemctl との連携やデーモンの管理も実践できます。

VPSの選び方については もあわせてご覧ください。

コメント

タイトルとURLをコピーしました