プロセス管理基礎:システムの動作を理解する
Linuxシステムで実行されるすべてのプログラムはプロセスとして管理されます。この基礎編では、プロセスの基本概念から監視・終了の基本操作まで、安全で確実な方法を学びます。
1. プロセスの基本概念
プロセスとは?
プロセスは、実行中のプログラムのインスタンスです。メモリ上に読み込まれ、CPUによって実行されている状態を指します。
例:テキストエディタ、Webブラウザ、バックアップスクリプトなど
プロセスの階層
Linuxでは、すべてのプロセスが親子関係を持ちます。システム起動時のinitプロセス(PID 1)が全プロセスの祖先となります。
プロセスの状態
- R (Running): 実行中または実行可能
- S (Sleeping): 割り込み可能な待機状態
- D (Uninterruptible sleep): 割り込み不可能な待機
- Z (Zombie): 終了したが親プロセスが回収待ち
- T (Traced/stopped): 停止またはトレース中
重要な概念
- PID (Process ID): 各プロセスの一意識別番号
- PPID (Parent Process ID): 親プロセスのPID
- UID: プロセスを実行しているユーザーID
- CPU使用率: プロセスがCPUを使用している割合
- メモリ使用量: プロセスが使用しているメモリ量
2. ps - プロセスの表示
psコマンドは現在実行中のプロセス情報を表示する基本的なツールです。
基本的な使い方
現在のターミナルのプロセス
$ ps
PID TTY TIME CMD 1234 pts/0 00:00:00 bash 1456 pts/0 00:00:00 ps
よく使うオプション
すべてのプロセス
$ ps aux
全ユーザーの全プロセスを詳細表示
階層表示
$ ps auxf
プロセスの親子関係をツリー形式で表示
特定ユーザー
$ ps -u username
指定ユーザーのプロセスのみ表示
プロセス検索
$ ps aux | grep nginx
nginxプロセスを検索
フィルタリングとカスタマイズ
CPU使用率順でソート
$ ps aux --sort=-%cpu | head -10
CPU使用率が高い順にトップ10を表示
メモリ使用量順でソート
$ ps aux --sort=-%mem | head -10
メモリ使用量が多い順にトップ10を表示
カスタム出力フォーマット
$ ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu
指定した項目のみを表示
3. top/htop - リアルタイム監視
top - システムモニタリング
基本的な使い方
$ top
表示される情報:
- システム稼働時間とロードアベレージ
- タスク数(実行中、停止中、ゾンビ)
- CPU使用率(ユーザー、システム、アイドル)
- メモリ使用量(物理、スワップ)
- 各プロセスの詳細情報
topの対話的コマンド
q
終了
k
プロセス終了(PID入力)
r
nice値変更
P
CPU使用率順ソート
M
メモリ使用量順ソート
T
実行時間順ソート
u
特定ユーザーでフィルタ
1
CPU個別表示切り替え
htop - 改良版top
htopはtopの改良版で、より使いやすいインターフェースを提供します。
インストール(Ubuntu/Debian)
$ sudo apt install htop
実行
$ htop
4. kill - プロセスの終了
killコマンドは、プロセスにシグナルを送信してプロセスを制御します。
主要なシグナル
| シグナル | 番号 | 説明 | 用途 |
|---|---|---|---|
| TERM | 15 | 正常終了要求 | 通常の終了(デフォルト) |
| KILL | 9 | 強制終了 | 応答しないプロセス |
| HUP | 1 | 再起動 | 設定再読み込み |
| INT | 2 | 中断 | Ctrl+Cと同等 |
| STOP | 19 | 一時停止 | プロセス一時停止 |
| CONT | 18 | 再開 | 停止プロセス再開 |
使用例
通常の終了
$ kill 1234
PID 1234のプロセスに正常終了シグナル(TERM)を送信
強制終了
$ kill -9 1234
PID 1234のプロセスを強制終了
プロセス名で終了
$ killall firefox
firefoxという名前のすべてのプロセスを終了
パターンマッチで終了
$ pkill -f "python script.py"
コマンドラインにマッチするプロセスを終了
複数プロセスの終了
$ kill -9 $(ps aux | grep 'python script.py' | awk '{print $2}')
条件に一致する複数プロセスを一括終了
⚠️ 安全な終了の順序
- まずTERMシグナル:
kill PID - 数秒待機してプロセスの状態確認
- 応答しない場合のみKILLシグナル:
kill -9 PID
KILLシグナル(-9)は最後の手段として使用してください。
⚠️ よくある間違いと落とし穴
プロセス管理でよく見かける初心者の間違いと、それを避ける方法を解説します。
🚫 間違い1: いきなり kill -9 を使う
❌ 悪い例
$ kill -9 1234 # いきなり強制終了
データの損失やファイル破損の可能性があります。
✅ 正しい方法
$ kill 1234 # まず正常終了を試行 $ sleep 3 # 少し待つ $ ps -p 1234 # プロセス確認 $ kill -9 1234 # どうしても必要な場合のみ
段階的なアプローチで安全に終了させます。
🚫 間違い2: システムプロセスを間違って終了
❌ 危険な例
$ kill 1 # init プロセス(絶対NG) $ kill 2 # kthreadd(カーネルプロセス)
システムが不安定になったりクラッシュの原因になります。
✅ 安全な確認方法
# プロセス詳細を確認してから実行 $ ps -p 1234 -o pid,ppid,cmd,user $ ps aux | grep 1234 # システムプロセスかどうか確認 $ ps -eo pid,cmd | grep -E "^\s*[0-9]+ \[.*\]"
プロセスの詳細を必ず確認してから操作します。
🚫 間違い3: grep結果の誤認識
❌ 注意が必要な例
$ ps aux | grep python user 1234 0.0 0.1 1234 456 pts/0 S+ 14:30 0:00 grep python
grepコマンド自体がプロセスとして表示されることがあります。
✅ 正しい検索方法
# pgrep を使用(推奨) $ pgrep -f python # grep を使う場合の工夫 $ ps aux | grep python | grep -v grep $ ps aux | grep [p]ython # 括弧を使う技法
専用コマンドや工夫を使って正確に検索します。
🚫 間違い4: PIDの重複を理解していない
❌ 誤解の例
# 昨日メモしたPIDをそのまま使用 $ kill 1234 # 別のプロセスかも!
PIDは再利用されるため、時間が経つと別のプロセスになっています。
✅ 安全な確認方法
# 現在のプロセスを確認してから実行 $ ps -p 1234 -o pid,cmd,etime $ pgrep -f "specific_command_name"
毎回プロセスを確認してから操作します。
🚫 間違い5: 権限エラーを無視
❌ 危険な対処
$ kill 1234 kill: (1234) - Operation not permitted $ sudo kill -9 1234 # いきなりsudoで強制終了
権限エラーの原因を理解せずsudoを使うのは危険です。
✅ 適切な対処
# まずプロセスの所有者を確認 $ ps -p 1234 -o pid,user,cmd # 自分のプロセスでない場合は慎重に判断 $ ls -la /proc/1234/ # プロセス詳細確認 $ sudo ps -p 1234 -o pid,user,cmd # root権限で確認
権限エラーの原因を理解してから適切に対処します。
💡 間違いを防ぐためのコツ
- 確認の習慣: killする前に必ずプロセス詳細を確認
- 段階的アプローチ: TERMシグナル → 待機 → KILLシグナルの順序
- バックアップ確認: 重要なプロセスの場合は事前にプロセス状態を記録
- テスト環境活用: 本番環境の前にテスト環境で動作確認
- ログ確認: システムログでプロセス終了後の影響を確認
📊 プロセス管理シリーズ全体
- 基礎編(この記事) - ps・top・killの基本操作
- 実践編 - ジョブコントロール、nice、システム監視
当サイトは、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイトプログラムである「Amazonアソシエイト・プログラム」の参加者です。商品価格に影響はありません。
📚 プロセス管理・システムプログラミング学習におすすめの書籍
プロセス管理の基礎とシステムプログラミングを効率的にマスターするために、実践的な学習書を厳選してご紹介します。ps・top・kill の深い理解とプログラミング技術を身につけられます。
📚 新しいLinuxの教科書
対象レベル: 初級〜中級
プロセス管理の基礎概念から実践操作まで体系的に学習。シェル操作、プロセス監視、シグナル制御など、実務で必須の知識を段階的に習得できる総合教科書。初心者に最適です。
📚 Linuxコマンドブック ビギナーズ 第5版
対象レベル: 入門〜初級
ps・top・killなどプロセス管理コマンドをリファレンス形式で完全網羅。各コマンドの使い方とオプションを実例付きで詳しく解説。手元に置いておきたい実践ガイドです。
📚 Linuxシステムプログラミング
対象レベル: 中級〜上級
プロセス管理の内部実装とシステムコール(fork・exec・wait)を深く理解。シグナル処理、プロセス間通信、メモリ管理など、低レベルAPIを実践的に学べる専門書。プログラマー必読の一冊です。
📚 ゼロからわかる Linux超入門[Ubuntu対応版]
対象レベル: 入門
プロセス管理を含むLinux基礎を初心者視点で丁寧に解説。Ubuntu環境でコマンド操作を一から学習できる入門書。図解が豊富で挫折しにくい設計。Linux初学者に最適な教材です。