「特定のプログラムだけを確認したいのに、top コマンドだと画面が動いてしまって見つけにくい…」 「フリーズしたアプリを強制的に閉じたい!」
そんな時に使うのが、psコマンドです。
top: 全体をリアルタイム監視する(動画)ps: その瞬間の状態を切り取る(写真)
この2つを使い分けるのが脱・初心者のポイントです。今回は、Linux管理者が手癖のように打つ「呪文」とともに紹介します。
関連:linux版タスクマネージャー topコマンド
【topとhtop】LinuxでCPUやメモリの使用率をリアルタイムで確認する方法【Linuxコマンド入門 Part3-1】
linux版タスクマネージャー topコマンド、CPUやメモリの使用率を確認し、タスクを管理する方法を紹介します。よく使うショートカットについてまとめました。

ps コマンド
Process Statusの略です。単に ps と打つだけでは、今開いているターミナルの情報しか出ないのであまり意味がありません。
基本構文 ps aux
以下の入力で全プロセスを確認できます。
ps auxオプションの説明
a: すべてのユーザーのプロセスを表示u: ユーザー名や開始時刻など、詳細を表示x: ターミナルで実行されていないプロセス(バックグラウンドで動くサーバー機能など)も表示
豆知識: 「aux(オックス)」と覚える人が多いです。ハイフン(
-)は付けなくても動きます(BSD由来の書き方ですが、Linuxの標準になっています)。
実行結果の見方
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 168468 13456 ? Ss Dec01 0:05 /sbin/init
lumen 1234 0.5 2.0 856420 56200 ? Sl 10:00 0:15 /usr/bin/python3 app.py見るべきポイントは3つだけです。
- USER: 誰が実行しているか。
- PID (Process ID): プロセスの背番号。(※あとで使います!)
- COMMAND: 実行されているコマンドの中身。
grepで絞り込みする
実行中のプロセスは何百個もあるので、ps aux だけだと長すぎて探すのが大変です。 そこで、第2回シリーズまでで学んだ 「パイプ |」と「grep」 を組み合わせます。
例えば、「python」で動いているプログラムだけを探したい時はこう打ちます。
ps aux | grep python解説: ps auxで全プロセスを標準出力し、”|”(pipe)で次のコマンドに受け渡し、grep pythonでパイソンの文字列がある行のみを絞り込みターミナルに出力
|(pipe)とgrepの詳細が知りたいときはこちら
【 | 】コマンドを繋げる「パイプ」~ | の使い方~【続・Linuxコマンド入門 #2】
コマンドを繋げる「パイプ (|)」入門!あるコマンドの結果を、ls | grep のように次のコマンドへ直接渡す仕組みを、初心者向けにわかりやすく解説します。
【初心者向け】grepコマンド「ファイル内から文字列検索」- 特定の行だけ抜き出す -【Linuxコマンド入門 #17】
Linuxのgrepコマンド。ログや設定ファイルから特定の「文字列」を検索する方法を解説。-i(大文字小文字無視)、-n(行番号)、-r(再帰)オプションやパイプ(|)との連携も紹介。
便利なオプションと組み合わせ集
–sort [項目名]でソートして表示する
–sort [項目名]でソートできます。メモリでソートして、出力をheadで上位だけ表示すれば、メモリの使用量が多いものを確認できます。
メモリ使用量上位6つを表示する
ps aux --sort -%mem | head -n 6CPU使用量上位6つを表示する
ps aux --sort -%cpu | head -n 6-f (forest)ツリー表示で親子関係を確認
プロセスは単独で動いているとは限りません。親プロセスが子プロセスを呼び出している場合、その関係性が見えるとトラブルシューティングが楽になります。
実行例
ps auxf
# または
ps -aux -f tree表示出力結果例
fオプションをつけると、親プロセスがあるときは、以下の様なASCIIアート風に階層表示してくれます。
# 長いので一部省略
root 2 /init
root 6 \_ plan9 --control-socket 7 --log-level 4 --server-f
root 291 \_ /init
root 293 | \_ /init
data 295 | \_ -bash
data 482 | \_ ps auxf
root 299 \_ /bin/login -f
data 392 \_ -bash-L スレッド単位で確認
プロセスは単独のスレッドではなく、複数のスレッドを起動して動作していることがあります。Pythonなどの開発中で非同期処理をしたいときなどに多いです。
そこでスレッド単位で見たいときは -Lオプションをつけます。
スレッド単位で見るのは、詳細を確認したい時なので、-p [PID]で確認したいプロセスを指定して詳細確認します。(指定しないとめちゃくちゃ長い出力が出て見ずらいです。)
実行例
ps -L -p [PID]結果の例
動作チェックのために、サブプロセスを3つ持つ簡易的なデモpythonプログラムを作りました。
サブプロセス実験用pythonプログラム
待機してループするだけのダミープロセスを3つ持つpythonプログラムです。
nano dummy.py などでファイル作成し、以下をコピペし作成すれば確認できます。
import threading
import time
def worker():
# 軽い処理をループ
while True:
time.sleep(1)
def main():
threads = []
for i in range(3): # 3つの子スレッド
t = threading.Thread(target=worker)
t.daemon = True # メイン終了で終了してOK
t.start()
threads.append(t)
# メインスレッドも生存させる
while True:
time.sleep(10)
if __name__ == "__main__":
main()
実行は、以下のコードでできます。 &は、実行後も別途terminal入力できるように(スレッド分離)するために付けています。
python3 dummy.py &実行結果
先ほど実行したpythonプログラムを例に、PID確認、スレッドの詳細確認の手順を行ってみます。
PIDを確認する
dummy.pyを実行後、ps 単体でpythonのPIDを確認。(実行の度に変わるので都度チェック)
ps
# 実行したら以下の様な感じに表示される。わかりずらかったら grepで絞り込んでもよいです。
# PID TTY TIME CMD
# 295 pts/0 00:00:00 bash
# 610 pts/0 00:00:00 python3
# 655 pts/0 00:00:00 pspython3のPIDは “610“であることが確認できました。
PIDを指定してスレッドの詳細を見る。
ps -L -p [pythonのPID]で詳細確認できるので、スレッド別の詳細を見てみます。
ps -L -p 610
# PID LWP TTY TIME CMD
# 610 610 pts/0 00:00:00 python3
# 610 611 pts/0 00:00:00 python3
# 610 612 pts/0 00:00:00 python3
# 610 613 pts/0 00:00:00 python3結果の見方
親プロセスがPID 610で、その子であるスレッド(LWP)が 610 ,611,612,613とあることが確認できます。
LWP (Light Weight Process): スレッドのこと、linuxだとスレッドを軽量プロセスという表現で表す。
PIDとLWP(スレッド番号)を見ると、以下のことわかります。
610(1行目): PIDと同じ ですね。つまり、これが 「メインスレッド(親玉)」 です。
- 611から613(2から4行目):Pythonプログラムによって生成された 「3つの子スレッド」 です。
TIME:実際にそのプロセスがCPUを使って計算した時間のことです。サンプルは待機してループするだけなので0秒になっています。
プロセスからより詳細のスレッド別でみることができると、過去の実行で残ってるバグやスタックして正常な処理を阻害しているスレッドなどを確認することができます。
また、計算しているスレッドとスリープしているスレッドの確認などもできます。
まとめ
- ps : プロセスの確認ができるコマンド
- ps aux : 全プロセスを確認できるオプション
- ps aux –sort [項目名] : 項目でソートして出力する。
- ps -f : スレッドの親子関係をツリー表示
- ps -L : スレッド(LWP)単位で表示する。
psコマンドで、プロセス別に詳細を確認することができるようになりました。
次回は、psコマンドで調べることができる PIDを用いて、プロセスをタスクキルするkillコマンドについて紹介します。
【kill】プロセスを安全かつ速やかに終了させる方法 killのシグナルを理解する【Linuxコマンド入門 Part3-5】
プロセスを終了させるkillコマンドについて使い方を紹介。また、実際の動作(シグナルの送信)、よく使うオプションと便利な使い方について詳しく紹介。コピペできる使用例付き。
uptimeと組み合わせると便利な | (pipe)とgrepについてオプションなど詳しく知りたいときはこちら
【 | 】コマンドを繋げる「パイプ」~ | の使い方~【続・Linuxコマンド入門 #2】
コマンドを繋げる「パイプ (|)」入門!あるコマンドの結果を、ls | grep のように次のコマンドへ直接渡す仕組みを、初心者向けにわかりやすく解説します。
【初心者向け】grepコマンド「ファイル内から文字列検索」- 特定の行だけ抜き出す -【Linuxコマンド入門 #17】
Linuxのgrepコマンド。ログや設定ファイルから特定の「文字列」を検索する方法を解説。-i(大文字小文字無視)、-n(行番号)、-r(再帰)オプションやパイプ(|)との連携も紹介。
第三回”Linuxコマンド入門 Part3 ~システムの状態確認とネットワークの基本~”では、linuxでどのようにCPUやメモリの状態を確認するか、ネットワークとの接続チェックなどの基本操作を解説しています。
6 記事
Linuxコマンド入門 Part3 ~システムの状態確認とネットワークの基本~
Linuxのシステム管理コマンドや基本的なネットワーク関係コマンドを理解しよう。
ここまで読んでいただきありがとうございます。
では、次の記事で。 lumenHero