プロセスとは
プロセスは、実行中のプログラムのインスタンスです。各プロセスには固有のID(PID)が割り当てられます。
プロセスの種類
- フォアグラウンドプロセス: ターミナルに結びついて実行
- バックグラウンドプロセス: ターミナルから独立して実行
- デーモン: システムサービスとして常駐
psコマンド - プロセス一覧表示
基本的な使い方
# 現在のターミナルのプロセス
ps
# すべてのプロセス(詳細)
ps aux
# プロセスツリー表示
ps auxf
# 特定のユーザーのプロセス
ps -u usernameps auxの出力
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 169416 13804 ? Ss 10:00 0:01 /sbin/init各列の意味:
- USER: プロセスの所有者
- PID: プロセスID
- %CPU: CPU使用率
- %MEM: メモリ使用率
- VSZ: 仮想メモリサイズ(KB)
- RSS: 物理メモリサイズ(KB)
- TTY: 端末(?はデーモン)
- STAT: プロセス状態
- START: 開始時刻
- TIME: 累積CPU時間
- COMMAND: コマンド名
プロセス状態(STAT)
- R: Running(実行中)
- S: Sleeping(待機中)
- D: Uninterruptible sleep(中断不可)
- Z: Zombie(ゾンビプロセス)
- T: Stopped(停止)
- s: セッションリーダー
- +: フォアグラウンド
- <: 高優先度
便利なpsコマンド
# CPU使用率トップ10
ps aux --sort=-%cpu | head -11
# メモリ使用率トップ10
ps aux --sort=-%mem | head -11
# 特定のコマンドを検索
ps aux | grep nginx
# プロセスツリーで表示
pstree -ptopコマンド - リアルタイム監視
基本的な使い方
# リアルタイムプロセス監視
top
# 特定ユーザーのプロセスのみ
top -u username
# 更新間隔を変更(秒)
top -d 2top内でのキー操作
- h: ヘルプ表示
- q: 終了
- k: プロセスをキル
- M: メモリ使用量でソート
- P: CPU使用量でソート
- 1: 各CPUコアを表示
- c: フルコマンドパス表示
- u: 特定ユーザーでフィルタ
htop(改良版top)
# インストール
sudo apt install htop
# 実行
htophtopの利点:
- ✅ カラフルで見やすい
- ✅ マウス操作可能
- ✅ CPU/メモリのバーグラフ
- ✅ プロセスツリー表示
- ✅ 検索・フィルタ機能
killコマンド - プロセス終了
基本的な使い方
# プロセスIDを指定して終了
kill PID
# 複数のプロセスを終了
kill PID1 PID2 PID3
# プロセス名で終了
killall process_nameシグナルの種類
# シグナル一覧表示
kill -l主要なシグナル:
- SIGTERM (15): 正常終了(デフォルト)
- SIGKILL (9):
強制終了(推奨されない) - SIGHUP (1): 再起動(設定ファイル再読み込み)
- SIGSTOP (19): 一時停止
- SIGCONT (18): 再開
シグナルの送信
# 正常終了(推奨)
kill -15 PID
kill -TERM PID
# 強制終了(最終手段)
kill -9 PID
kill -KILL PID
# 再起動シグナル
kill -HUP PID
kill -1 PIDpkillとpgrepコマンド
# プロセス名で終了
pkill nginx
# 正規表現で検索して終了
pkill -f "python.*server"
# プロセス名でPIDを検索
pgrep nginx
# 詳細表示
pgrep -a nginxバックグラウンド実行
コマンドをバックグラウンドで実行
# &を付けてバックグラウンド実行
long_running_command &
# ジョブ一覧表示
jobs
# フォアグラウンドに戻す
fg %1
# バックグラウンドに送る(Ctrl+Z後)
bg %1nohupコマンド
ターミナルを閉じてもプロセスが継続します。
# nohupで実行
nohup python server.py &
# 出力はnohup.outに保存される
tail -f nohup.outscreenとtmux
# screen セッション開始
screen -S mysession
# Ctrl+A, D でデタッチ
# 再接続
screen -r mysession
# tmux セッション開始
tmux new -s mysession
# Ctrl+B, D でデタッチ
# 再接続
tmux attach -t mysessionsystemctlコマンド - サービス管理
基本的な操作
# サービスの開始
sudo systemctl start nginx
# サービスの停止
sudo systemctl stop nginx
# サービスの再起動
sudo systemctl restart nginx
# 設定の再読み込み(再起動なし)
sudo systemctl reload nginx
# 状態確認
sudo systemctl status nginx自動起動の設定
# 自動起動を有効化
sudo systemctl enable nginx
# 自動起動を無効化
sudo systemctl disable nginx
# 自動起動の状態確認
sudo systemctl is-enabled nginxサービス一覧
# すべてのサービス
systemctl list-units --type=service
# 実行中のサービスのみ
systemctl list-units --type=service --state=running
# 失敗したサービス
systemctl list-units --type=service --state=failedログ表示(journalctl)
# サービスのログ表示
sudo journalctl -u nginx
# リアルタイムでログ表示
sudo journalctl -u nginx -f
# 最新100行
sudo journalctl -u nginx -n 100
# 今日のログ
sudo journalctl -u nginx --since todayリソース使用量の監視
CPU使用率の確認
# CPU情報
lscpu
# 負荷平均
uptime
w
# 詳細なCPU統計
mpstat 1メモリ使用量
# メモリ使用状況
free -h
# より詳細に
cat /proc/meminfo
# メモリ使用量トップ5
ps aux --sort=-%mem | head -6ディスクI/O
# ディスクI/O統計
iostat -x 1
# プロセスごとのI/O
sudo iotopプロセス優先度の変更
nice値(-20〜19)
- -20: 最高優先度
- 0: デフォルト
- 19: 最低優先度
niceコマンド
# 低優先度で実行
nice -n 10 ./heavy_process.sh
# 高優先度で実行(root権限必要)
sudo nice -n -10 ./important_process.shreniceコマンド
# 実行中プロセスの優先度変更
renice -n 5 -p PID
# ユーザーのすべてのプロセス
renice -n 10 -u username実用例
例1: 暴走プロセスの停止
# CPU使用率が高いプロセスを特定
top
# または
ps aux --sort=-%cpu | head -10
# プロセスIDを確認してキル
kill -15 PID
# 応答しない場合は強制終了
kill -9 PID例2: メモリリークの調査
# メモリ使用量の監視
watch -n 1 'ps aux --sort=-%mem | head -10'
# 特定プロセスのメモリ使用量推移
while true; do
ps -p PID -o pid,%mem,vsz,rss,cmd
sleep 5
done例3: Webサーバーの再起動
# Nginxの再起動(ダウンタイムなし)
sudo systemctl reload nginx
# 設定テスト後に再起動
sudo nginx -t && sudo systemctl reload nginx
# ログ確認
sudo journalctl -u nginx -n 50例4: ゾンビプロセスの処理
# ゾンビプロセスの検索
ps aux | grep 'Z'
# 親プロセスを終了させる
kill -9 PPIDトラブルシューティング
プロセスが終了しない
# 1. まず正常終了を試す
kill -15 PID
# 2. 待っても終了しない場合
kill -9 PID
# 3. 親プロセスごと終了
pkill -9 -P PPIDポートを使用しているプロセスの特定
# ポート80を使用しているプロセス
sudo lsof -i :80
# または
sudo netstat -tulpn | grep :80
# 終了
sudo kill $(sudo lsof -t -i:80)CPU 100%の原因調査
# CPU使用率トップ
top
# Pキーでソート
# strace でシステムコールを追跡
sudo strace -p PID
# プロセスのスタックトレース
sudo cat /proc/PID/stack監視スクリプト例
リソース監視スクリプト
#!/bin/bash
THRESHOLD_CPU=80
THRESHOLD_MEM=90
while true; do
# CPU使用率チェック
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
if (( $(echo "$cpu_usage > $THRESHOLD_CPU" | bc -l) )); then
echo "[ALERT] CPU使用率が高い: ${cpu_usage}%"
ps aux --sort=-%cpu | head -5
fi
# メモリ使用率チェック
mem_usage=$(free | grep Mem | awk '{print ($3/$2) * 100.0}')
if (( $(echo "$mem_usage > $THRESHOLD_MEM" | bc -l) )); then
echo "[ALERT] メモリ使用率が高い: ${mem_usage}%"
ps aux --sort=-%mem | head -5
fi
sleep 60
doneまとめ
プロセス管理はLinuxシステム管理の基本スキルです。
重要コマンド
- ps aux: プロセス一覧
- top/htop: リアルタイム監視
- kill: プロセス終了
- systemctl: サービス管理
- journalctl: ログ確認
ベストプラクティス
- kill -9は最終手段(まずは-15を試す)
- 定期的なリソース監視
- ログの確認習慣
- 適切な優先度設定