psコマンドとは?Linuxで実行中のプロセスを確認する方法

Linux

Linuxで「今どんなプログラムが動いているのか知りたい」と思ったことはありませんか?

そんなときに最も基本となるのがpsコマンドです。

psコマンドを使えば、現在実行中のプロセス一覧を確認できます。

また、プロセスID(PID)の確認や、特定のプログラムが起動しているかの確認、killコマンドでプロセスを終了する前の確認など、Linuxでは非常に使用頻度の高いコマンドです。

この記事では、Linux初心者向けにpsコマンドの基本的な使い方、代表的なオプション、grepとの組み合わせ、top・htopとの違いまで分かりやすく解説します。

psコマンドとは

ps(Process Status)は、現在実行中のプロセス情報を表示するLinuxコマンドです。

CPUやメモリをリアルタイム監視するtophtopとは異なり、実行した瞬間のプロセス一覧を表示するのが特徴です。

例えば次のような用途で利用されます。

  • 実行中プロセスの確認
  • PIDの確認
  • 特定サービスの起動確認
  • killコマンドで終了する前の確認
  • シェルスクリプトでプロセスを判定する

Linuxサーバー管理では必ず覚えておきたい基本コマンドの一つです。

psコマンドの基本構文

ps [オプション]

オプションなしで実行すると、自分の端末で実行しているプロセスだけが表示されます。

ps

実行例

PID TTY          TIME CMD
2185 pts/0    00:00:00 bash
2314 pts/0    00:00:00 ps

初めて実行すると「思ったより少ない」と感じるかもしれません。

これは、現在操作している端末(TTY)のプロセスだけが表示されるためです。

現在実行中のすべてのプロセスを表示する

Linuxでは、システム全体のプロセスを確認することがよくあります。

最もよく使われるのが次のコマンドです。

ps -ef

実行例

UID        PID  PPID CMD
root         1     0 /usr/lib/systemd/systemd
root       824     1 /usr/sbin/sshd
mysql     1032     1 /usr/sbin/mysqld
apache    1511     1 /usr/sbin/httpd

サーバー管理では、この形式を使用する機会が最も多いでしょう。

BSD形式で表示する(ps aux)

Linuxでは、BSD形式のオプションも広く利用されています。

ps aux

実行例

USER       PID %CPU %MEM COMMAND
root          1  0.1  0.5 systemd
mysql      1032  3.5  8.2 mysqld
www-data   1814  0.2  1.3 apache2

ps auxでは、CPU使用率やメモリ使用率も表示されます。

そのため、プロセスの状態を簡単に確認したい場合によく利用されます。

ps -efとps auxの違い

どちらもシステム全体のプロセスを表示しますが、表示形式が異なります。

コマンド 特徴
ps -ef UNIX形式で表示される
ps aux BSD形式で表示される

Linuxでは、どちらもよく利用されます。

会社や現場によって利用する形式が異なるため、両方読めるようになっておくと安心です。

各項目の見方

ps -efでは主に次の項目が表示されます。

項目 意味
UID 実行ユーザー
PID プロセスID
PPID 親プロセスID
CMD 実行コマンド

特に覚えておきたいのはPIDです。

PIDは、killコマンドやstraceなど、他のコマンドでも頻繁に利用します。

特定のプロセスを検索する方法

大量のプロセスから目的のものを探すには、grepと組み合わせるのが一般的です。

ps -ef | grep nginx

例えばNginxが動いているか確認できます。

root      1514     1 nginx
www-data  1515  1514 nginx

Apacheであれば次のように検索します。

ps -ef | grep httpd

UbuntuやDebianではApacheの実行ファイル名がapache2の場合もあります。

ps -ef | grep apache2

grep自身を除外する方法

そのまま検索すると、grepコマンド自身も表示されます。

ps -ef | grep nginx

結果の一番下に、grep自身が表示されることがあります。

これを除外するには、さらにgrepで除外します。

ps -ef | grep nginx | grep -v grep

最近では、次回紹介するpgrepコマンドを使う方法もよく利用されています。

PIDだけ取得する方法

プロセスIDだけ必要な場合は、awkを組み合わせる方法があります。

ps -ef | grep nginx | grep -v grep | awk '{print $2}'

実行結果

1514
1515

シェルスクリプトでもよく使われる書き方です。

親プロセスを確認する方法

親子関係を確認したい場合は、PPID列を見ます。

ps -ef

例えば

PID   PPID
2100     1
2142  2100

この場合、PID2100が親プロセスになります。

親子関係をもっと見やすく確認したい場合は、次の記事で紹介するpstreeもおすすめです。

CPU使用率やメモリ使用率を表示する

CPUやメモリ使用率を確認したい場合は、BSD形式の表示が便利です。

ps aux

主に次の列を確認します。

内容
%CPU CPU使用率
%MEM メモリ使用率
VSZ 仮想メモリサイズ
RSS 実際に使用している物理メモリ

CPUやメモリをリアルタイムで監視したい場合は、前回紹介したhtoptopのほうが適しています。

指定したユーザーのプロセスだけ表示する

特定ユーザーのプロセスだけ確認したい場合は、-uオプションを利用します。

ps -u root

現在ログイン中のユーザーだけ表示したい場合は、次のようにも実行できます。

ps -u "$USER"

複数ユーザーが利用するサーバーでは非常によく使われるオプションです。

ツリー形式で表示する

親子関係をツリー表示したい場合は、次のように実行できます。

ps -ef --forest

実行例

systemd
 ├─sshd
 │   └─bash
 │       └─ps
 └─mysqld

どのプロセスから子プロセスが作成されたのかが一目で分かります。

実行中のプロセスを開始時刻順に確認する

プロセスの開始時刻も確認できます。

ps -eo pid,user,lstart,cmd

サーバーを再起動したあと、どのタイミングでサービスが起動したかを確認するときに便利です。

CPU使用率順に並び替える

CPUを多く使用しているプロセスを確認したい場合は、--sortオプションを使用します。

ps -eo pid,user,%cpu,%mem,cmd --sort=-%cpu

CPU使用率が高い順に表示されます。

メモリ使用率順に並び替える

メモリ使用量が多いプロセスを調査する場合は、次のように実行します。

ps -eo pid,user,%cpu,%mem,cmd --sort=-%mem

メモリリークの調査でもよく利用されます。

PIDを指定してプロセスを確認する

PIDが分かっている場合は、そのプロセスだけ表示できます。

ps -p 1234

複数指定することも可能です。

ps -p 1234,5678

表示項目を自由に変更する

-oオプションを使うと、必要な項目だけ表示できます。

ps -o pid,user,%cpu,%mem,cmd

主な指定項目は次のとおりです。

項目 意味
pid プロセスID
user 実行ユーザー
%cpu CPU使用率
%mem メモリ使用率
etime 起動からの経過時間
cmd 実行コマンド

必要な情報だけ表示できるため、シェルスクリプトでもよく利用されます。

プロセス数を数える方法

現在動作しているプロセス数を確認したい場合は、次のように実行します。

ps -ef | wc -l

ただし、この結果には見出し行も含まれます。

正確な件数だけ取得したい場合は、次のように書くこともあります。

ps -e --no-headers | wc -l

psコマンドとtop・htopの違い

コマンド 用途
ps 実行した瞬間のプロセス一覧を表示する
top リアルタイム監視を行う
htop リアルタイム監視と対話操作を行う

人が画面を見ながら監視するならtophtop、スクリプトや調査用として結果を取得するならpsが向いています。

psコマンドとpgrepの違い

プロセスを検索するだけなら、pgrepの方がシンプルです。

コマンド 特徴
ps プロセス情報全体を取得できる
pgrep プロセス名からPIDを検索できる

次の記事では、pgrepコマンドについて詳しく解説します。

プロセスを終了する前に確認すること

プロセスを終了する前には、必ず対象のプロセスを確認しましょう。

ps -ef | grep nginx

PIDや実行ユーザー、コマンド名を確認したあとで、killコマンドを実行するのが基本です。

データベースやWebサーバーなどの重要なサービスは、直接killするよりもsystemctlで停止・再起動したほうが安全な場合があります。

よくあるエラー

grepしか表示されない

対象プロセスが存在しない場合は、grep自身だけ表示されることがあります。

ps -ef | grep nginx

その場合は、次のように除外してください。

ps -ef | grep nginx | grep -v grep

Permission deniedが表示される

一般ユーザーでは、一部情報が制限される環境があります。

必要に応じてsudoを利用してください。

sudo ps -ef

プロセスが見つからない

プロセスが既に終了している可能性があります。

リアルタイムで監視したい場合は、tophtopの利用も検討しましょう。

よくある質問

psとps -efは何が違いますか?

psは現在の端末で実行中のプロセスだけを表示します。

ps -efはシステム全体のプロセスを表示します。

ps auxとps -efはどちらを使えばよいですか?

どちらでも問題ありません。

ps auxはCPU使用率やメモリ使用率を確認しやすく、ps -efはUNIX形式として広く利用されています。

PIDとは何ですか?

PIDはプロセスIDです。

Linuxでは実行中の各プロセスへ一意に割り当てられます。

killコマンドなどでも利用されます。

プロセス検索ならgrepとpgrepどちらが良いですか?

確認だけならpgrepの方が簡単です。

プロセス情報も一緒に見たい場合はpsgrepの組み合わせが便利です。

リアルタイム監視はできますか?

psコマンドは実行した瞬間の情報を表示するコマンドです。

リアルタイム監視にはtophtopを利用してください。

まとめ

psコマンドは、Linuxで現在実行中のプロセスを確認するための基本コマンドです。

特に次のコマンドは覚えておくと役立ちます。

コマンド 用途
ps 現在の端末のプロセスを表示
ps -ef システム全体のプロセスを表示
ps aux CPU・メモリ使用率も表示
ps -ef | grep プロセス名 特定プロセスを検索
ps -eo pid,user,%cpu,%mem,cmd --sort=-%cpu CPU使用率順に表示
ps -eo pid,user,%cpu,%mem,cmd --sort=-%mem メモリ使用率順に表示

障害対応では、まずpsでプロセスを確認し、その後tophtopでリアルタイムの負荷を確認する流れが一般的です。

プロセスを終了する前には、対象が本当に停止してよいサービスなのかを十分確認してから操作しましょう。

コメント

タイトルとURLをコピーしました