システム管理 初級

プロセス管理の基本

Linuxにおけるプロセスの確認・操作方法を学ぶ。ps、top、kill、bg/fgなどのコマンドを使いこなす

Linuxではプログラムが動作する単位を「プロセス」と呼びます。 サーバーの応答が遅い、ディスクI/Oが高い、特定のアプリが固まった——そういった場面でプロセスを素早く調べて対処できると、トラブル対応の幅が大きく広がります。

動いているプロセスを確認する(ps)

ps コマンドはその瞬間のプロセス一覧を表示します。

ps aux

よく使うオプションの意味:

オプション説明
a自分以外のユーザーのプロセスも表示
uCPU・メモリ使用率などを表示
x端末に紐付いていないプロセスも表示

特定のプロセスを絞り込むには grep と組み合わせます。

# nginx が動いているか確認
ps aux | grep nginx | grep -v grep

grep -v grepgrep コマンド自身が検索結果に混入しないようにするテクニックです。

リアルタイムで監視する(top / htop)

top はプロセスの状態をリアルタイムで更新しながら表示します。

top

起動中の主なキー操作:

キー動作
q終了
PCPU使用率順に並べ替え
Mメモリ使用率順に並べ替え
kプロセスにシグナルを送る(PIDを入力)

htop が入っている場合はこちらのほうがカラフルで操作しやすいです。

htop

プロセスIDを調べる(pgrep)

pgrep はプロセス名からPIDだけを返してくれるコマンドです。

# sshd のPIDを調べる
pgrep sshd

プロセス名と一緒に表示したいときは -l オプションを付けます。

pgrep -l sshd

プロセスを終了させる(kill / killall)

kill コマンドはPIDを指定してシグナルを送ります。

# 通常の終了(SIGTERM)
kill 1234

# 強制終了(SIGKILL)
kill -9 1234

SIGTERM(デフォルト)はプロセスに「終了してください」とお願いする形なので、プロセスが後処理をして終了できます。 SIGKILL(-9)はOSが問答無用で強制終了させるため、後処理が実行されません。まずはSIGTERMを試して、それでも終了しない場合にのみSIGKILLを使いましょう。

プロセス名で指定したい場合は killall が便利です。

killall firefox

バックグラウンド・フォアグラウンドの切り替え

コマンドの末尾に & を付けると、バックグラウンドで実行できます。

# バックグラウンドで実行
sleep 60 &

バックグラウンドのジョブ一覧は jobs で確認できます。

jobs
# [1]+  Running    sleep 60 &

fg でフォアグラウンドに戻したり、実行中のコマンドを Ctrl+Z で一時停止してから bg でバックグラウンドに送ることもできます。

# フォアグラウンドで実行中のコマンドを一時停止
Ctrl+Z

# バックグラウンドで再開
bg

# フォアグラウンドに戻す
fg

プロセスツリーを見る(pstree)

プロセスの親子関係を木構造で表示するには pstree を使います。

pstree -p

-p を付けるとPIDも一緒に表示されます。特定のプロセスだけに絞ることも可能です。

pstree -p $(pgrep sshd | head -1)

練習問題

問題1

現在動いているすべてのプロセスをCPU使用率の高い順に表示するコマンドを書いてください。

問題2

プロセス名 python3 を持つプロセスのPIDをコマンド一つで調べてください。

問題3

PIDが 4567 のプロセスを、まず穏やかに終了させ、それでも終了しない場合に強制終了させるコマンドを順番に書いてください。

問題4

find / -name "*.log" というコマンドをバックグラウンドで実行し、ジョブ番号を確認してからフォアグラウンドに戻すまでの一連のコマンドを書いてください。


答え

問題1の答え

ps aux --sort=-%cpu

または top を起動して P キーを押しても同じ結果が得られます。

問題2の答え

pgrep python3

問題3の答え

# 穏やかに終了(SIGTERM)
kill 4567

# 終了しない場合は強制終了(SIGKILL)
kill -9 4567

問題4の答え

# バックグラウンドで実行
find / -name "*.log" &

# ジョブ一覧を確認
jobs

# フォアグラウンドに戻す(ジョブ番号が1の場合)
fg 1