🎯 この記事で学べること
- 1`ps`コマンドの基本的な使い方をマスターできます
- 2実行中のプロセスの情報(PID、CPU使用率、メモリ使用率)を読み取れるようになります
- 3auxや-efなどの主要なオプションの違いと使い方がわかります
- 4特定のプロセスを効率的に検索する方法を身につけられます
- 5プロセスの状態(STAT)の意味を理解し、問題のあるプロセスを見つけられるようになります
読了時間: 約8分
プロセスって何だろう?
こんにちは!今回は、Linuxシステムで動いているプログラムを見る方法について学んでいきましょう。
Windowsのタスクマネージャーを使ったことはありますか?あれと同じように、Linuxでも今どんなプログラムが動いているか確認できるんです。その時に使うのがps
コマンドです!
ps
は「Process Status(プロセスの状態)」の略で、システム上で実行中のプロセス(動いているプログラムのこと)の情報を表示してくれます。どのプログラムがCPUやメモリをどれくらい使っているか、誰が実行しているかなど、いろいろな情報がわかるんですよ。
基本的な使い方
まずは一番シンプルに
何もオプションを付けずにps
を実行してみましょう:
$ ps
PID TTY TIME CMD
12345 pts/0 00:00:00 bash
12789 pts/0 00:00:00 ps
この表示では、現在のターミナルで動いているプロセスだけが表示されます。bashはシェル、psは今実行したコマンド自身ですね!
表示される情報の意味:
- PID: Process ID(プロセスID)- 各プロセスに付けられる固有の番号
- TTY: 端末の種類
- TIME: そのプロセスがCPUを使った累計時間
- CMD: 実行されたコマンド名
よく使うオプション
システム全体のプロセスを見る(aux)
ps
の本領発揮は、システム全体のプロセスを見る時です!
$ ps aux
これは最もよく使われる形式で、すべてのプロセスを詳細に表示します:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.4 169936 11200 ? Ss 08:00 0:02 /sbin/init
root 89 0.0 0.2 65520 5824 ? S<s 08:00 0:00 /lib/systemd/systemd-journald
www-data 1234 0.5 2.1 345678 54321 ? S 09:15 0:15 nginx: worker process
各列の意味を見ていきましょう:
- USER: プロセスを実行しているユーザー
- PID: プロセスID(この番号でプロセスを特定します)
- %CPU: CPU使用率(パーセント)
- %MEM: メモリ使用率(パーセント)
- VSZ: 仮想メモリサイズ(KB単位)
- RSS: 実際に使用している物理メモリサイズ(KB単位)
- TTY: 端末(?は端末なしで動いているプロセス)
- STAT: プロセスの状態(後で詳しく説明しますね)
- START: プロセスが開始された時刻
- TIME: 累計CPU使用時間
- COMMAND: 実行されたコマンドの詳細
ps aux
は「今システムで何が起きているか」を把握する最初の一歩です。トラブルシューティングの時は、まずこのコマンドから始めましょう!
もう一つの形式(-ef)
SystemVスタイルの表記もよく使われます:
$ ps -ef
こちらは親プロセスのID(PPID)も表示されるので、プロセスの親子関係がわかりやすいです:
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 08:00 ? 00:00:02 /sbin/init
root 89 1 0 08:00 ? 00:00:00 /lib/systemd/systemd-journald
プロセスの状態(STAT)を理解しよう
STATフィールドの文字には、それぞれ意味があります:
基本的な状態
- R: Running(実行中)- 今まさにCPUを使っている
- S: Sleeping(スリープ中)- 何かを待っている(普通の状態)
- D: Disk sleep(ディスクスリープ)- ディスクI/O待ち(中断できない)
- T: Stopped(停止中)- Ctrl+Zなどで一時停止された
- Z: Zombie(ゾンビ)- 終了したけど親が回収していない(問題かも!)
追加の情報
- <: 高優先度(nice値が負)
- N: 低優先度(nice値が正)
- s: セッションリーダー
- +: フォアグラウンドプロセスグループ
ゾンビプロセス(Z)が大量にある場合は、プログラムに問題がある可能性があります。親プロセスが子プロセスの終了を適切に処理していないんです。
🎮 理解度チェック
Q1: ps aux
で表示される%CPU
が50.0のプロセスは、どういう状態ですか?
特定のプロセスを検索する
grepと組み合わせる
システムには大量のプロセスが動いているので、特定のプロセスだけを見たいことがよくあります:
# nginxに関連するプロセスを検索
$ ps aux | grep nginx
# pythonプロセスを検索
$ ps aux | grep python
# 自分のユーザー名のプロセスだけ
$ ps aux | grep "^username"
grepで検索すると、grep自身も結果に含まれてしまいます。これを避けるにはps aux | grep "[n]ginx"
のように最初の文字を[]で囲むテクニックがあります!
ユーザーで絞り込む
特定のユーザーのプロセスだけを見たい場合:
# 特定ユーザーのプロセスのみ
$ ps -u username
# 自分のプロセスのみ
$ ps -u \$USER
コマンド名で直接検索
# nginxというコマンド名のプロセスのみ
$ ps -C nginx
# 複数のコマンドを指定
$ ps -C nginx,apache2
プロセスをソートして見る
CPU使用率の高い順に
システムが重い時は、どのプロセスがCPUを使っているか知りたいですよね:
# CPU使用率の高い順トップ10
$ ps aux --sort=-%cpu | head -10
# または
$ ps aux | sort -k3 -nr | head -10
メモリ使用率の高い順に
メモリ不足の時はこちら:
# メモリ使用率の高い順トップ10
$ ps aux --sort=-%mem | head -10
# または
$ ps aux | sort -k4 -nr | head -10
--sort
オプションの-
は降順(大きい順)を意味します。昇順にしたい場合は-
を付けません。
カスタム表示で必要な情報だけ
表示する列を選ぶ
必要な情報だけを選んで表示できます:
# PID、ユーザー、CPU使用率、コマンドのみ
$ ps -eo pid,user,%cpu,comm
# メモリ情報も含めて
$ ps -eo pid,user,%cpu,%mem,vsz,rss,comm
# 実行時間の長いプロセストップ10
$ ps -eo pid,etime,comm --sort=-etime | head -10
🎮 理解度チェック
Q2: プロセスの状態が「Z」と表示されている場合、そのプロセスはどんな状態ですか?
実践的な使い方
プロセスツリーを見る
プロセスの親子関係を視覚的に見たい時:
# 階層表示
$ ps -ejH
# より見やすいツリー表示(pstreeコマンドがある場合)
$ pstree
$ pstree -p # PID付き
長時間動いているプロセスを見つける
# 1日以上動いているプロセス
$ ps -eo pid,etime,cmd | grep -E "[0-9]+-"
# 開始時刻付きで表示
$ ps -eo pid,lstart,cmd
問題のあるプロセスを探す
# ゾンビプロセスを探す
$ ps aux | grep " Z "
# CPU使用率が高いプロセス(50%以上)
$ ps aux | awk '\$3 > 50.0'
# メモリを大量に使っているプロセス(10%以上)
$ ps aux | awk '\$4 > 10.0'
プロセス監視スクリプトの例
実務でよく使う監視スクリプトを紹介します:
#!/bin/bash
# CPU使用率の高いプロセスを監視
THRESHOLD=80 # CPU使用率の閾値
echo "CPU使用率が\${THRESHOLD}%を超えるプロセスを監視中..."
while true; do
ps aux | awk -v threshold=\$THRESHOLD '\$3 > threshold {
printf "警告: PID %s (%s) がCPUを %.1f%% 使用しています\n", \$2, \$11, \$3
}'
sleep 5
done
トラブルシューティング
プロセスが見つからない?
# すべてのプロセスを確実に表示
$ ps -A
$ ps -e
$ ps aux
# 端末に関連付けられていないプロセスも含める
$ ps -ax
より詳細な情報が欲しい
# 特定のPIDの詳細情報
$ ps -p 1234 -f
# 環境変数も含めて表示
$ ps -p 1234 e
# /procから直接情報を取得
$ cat /proc/1234/status
🎮 理解度チェック
Q3: ps aux | grep nginx
を実行した時、grep自身も結果に含まれてしまいます。これを避ける方法は?
よく使うエイリアス
作業効率を上げるために、よく使うコマンドはエイリアスにしておきましょう:
# ~/.bashrcに追加
alias psc='ps aux | grep'
alias psmem='ps aux --sort=-%mem | head'
alias pscpu='ps aux --sort=-%cpu | head'
alias pstree='ps -ejH'
psコマンドの仲間たち
topコマンド(リアルタイム監視)
$ top
psが静的な表示なのに対し、topはリアルタイムで更新されます。
htopコマンド(より使いやすい)
$ htop # インストールが必要な場合があります
カラフルで操作しやすいインターフェースです。
pidofコマンド(PIDを素早く取得)
$ pidof nginx
1234 5678
プロセス名からPIDを直接取得できます。
📝 まとめ
今回はps
コマンドについて学びました!
ps
はシステムで動いているプロセスを確認するコマンドps aux
で全プロセスの詳細情報を表示(最もよく使う)ps -ef
でプロセスの親子関係も確認できる- プロセスの状態(STAT)でR(実行中)、S(スリープ)、Z(ゾンビ)などがわかる
- grepと組み合わせて特定のプロセスを検索できる
- CPU使用率やメモリ使用率でソートして問題のあるプロセスを見つけられる
プロセス管理はシステム管理の基本です。ps
コマンドを使いこなせるようになると、システムの状態を把握して、問題を素早く発見できるようになりますよ!
次はkillコマンドでプロセスを制御する方法を学びましょう。psで見つけたプロセスを終了させる方法がわかります!
YouTube動画で復習
動画でさらに詳しく学びたい方は、CommandAcademyのYouTubeチャンネルをチェック!視覚的にコマンドの動作を確認できます。
最初はps aux
だけ覚えておけば大丈夫です。慣れてきたら、grepとの組み合わせやソート機能を使って、より効率的にプロセスを管理できるようになりましょう!