プロセス管理基礎:システムの動作を理解する

プロセス管理基礎 - システムプロセスの基本

Linuxシステムで実行されるすべてのプログラムはプロセスとして管理されます。この基礎編では、プロセスの基本概念から監視・終了の基本操作まで、安全で確実な方法を学びます。

目次

  1. プロセスの基本概念
  2. ps - プロセスの表示
  3. top/htop - リアルタイム監視
  4. kill - プロセスの終了

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

htoptopの改良版で、より使いやすいインターフェースを提供します。

インストール(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}')

条件に一致する複数プロセスを一括終了

⚠️ 安全な終了の順序

  1. まずTERMシグナル: kill PID
  2. 数秒待機してプロセスの状態確認
  3. 応答しない場合のみ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シグナルの順序
  • バックアップ確認: 重要なプロセスの場合は事前にプロセス状態を記録
  • テスト環境活用: 本番環境の前にテスト環境で動作確認
  • ログ確認: システムログでプロセス終了後の影響を確認

🚀 次のステップ

プロセス管理の基本操作をマスターしたら、実践編でより高度な技術を学びましょう:

📋 実践編で学ぶ内容

  • ジョブコントロール - バックグラウンド・フォアグラウンド操作
  • nice/renice - プロセス優先度の管理
  • システム監視ツール - 詳細な性能監視
  • トラブルシューティング - 実際の問題解決手法
実践編に進む →

📊 プロセス管理シリーズ全体

  1. 基礎編(この記事) - ps・top・killの基本操作
  2. 実践編 - ジョブコントロール、nice、システム監視
📢 アフィリエイトリンクについて

当サイトは、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイトプログラムである「Amazonアソシエイト・プログラム」の参加者です。商品価格に影響はありません。