【Linux】psコマンドの使い方と実行中プロセスを表示する方法

Linuxのpsコマンドの使い方とは?実行中のプロセスを表示する方法についてまとめました。

psコマンドの使い方

psコマンドは、実行中のプロセスを表示します。

ps [オプション] [プロセスID]
オプション 概要
a 全てのユーザーのプロセスを表示
f プロセスをツリー形式で表示
r 実行中のプロセス情報のみ表示
u 各プロセスの実行ユーザーやCPU、メモリ等の情報も表示
全制御端末のプロセスを表示(制御端末のないデーモンのようなプロセス情報も表示)
-e 全てのプロセスを表示
-f 完全なフォーマットで表示
-l 標準の「PID、TTY、TIME、CMD」と「F、S、UID、PPID、C、PRI、NI、ADDR、SZ、VSZ、RSS、WCHAN、STAT」を表示
-p PID 特定のPIDのプロセス情報のみ表示
-C プロセス名 指定した名前のプロセス情報のみ表示
-w 行を追加して表示(wを複数書くと、その数だけ行も増加)
o, -o 出力形式を指定

実行結果に表示されるフィールドの概要は以下のとおり。

フィールド 概要
F プロセスの状態(16進数)。00:プロセスが終了状態、01:システム・プロセス(常にメモリー上に存在)の状態、 02:親プロセスからトレースされている状態、04:親プロセスからトレースされて停止状態、08:プロセスがシグナルで起動できない状態、10:プロセスがメモリー上にあるため、イベント終了までロックされている状態、20:プロセスがスワップできない状態
UID プロセスを実行しているユーザーID
PID プロセスID
PPID 現在のプロセスの親プロセスID
PRI 優先度
NI ナイス値(優先順位)
VSZ 仮想メモリの全サイズ
RSS 使用中の物理メモリー量
WCHAN プロセスが休眠状態の時のカーネル関数名
STAT/S プロセスのステータス。R:実行可能、S:停止、D:割り込み不可の停止、T:停止またはトレース中、Z:ゾンビ・プロセス、W:スワップ・アウトしたプロセス、N:ナイス値が正
TTY 制御端末の種類および番号(どの端末から起動されたかを示す)
TIME プロセスが開始した時刻
COMMAND/CMD プロセスのコマンド名

【使用例】「ps ax」もしくは「ps -ef」で実行中の全てのプロセスを表示

「ps ax」もしくは「ps -ef」で実行中の全てのプロセスを表示します。

$ ps ax
  PID   TT  STAT      TIME COMMAND
    1   ??  Ss    14:25.92 /sbin/launchd
  314   ??  Ss     3:21.36 /usr/libexec/logd
  316   ??  Ss     0:08.14 /usr/libexec/UserEventAgent (System)
$ ps -ef
  UID   PID  PPID   C STIME   TTY           TIME CMD
    0     1     0   0 水01PM ??        14:22.33 /sbin/launchd
    0   314     1   0 水01PM ??         3:20.53 /usr/libexec/logd
    0   316     1   0 水01PM ??         0:08.12 /usr/libexec/UserEventAgent (System)
    0   318     1   0 水01PM ??         0:01.31 

【使用例】「ps aux」で全てのユーザーの全てのプロセスを表示

「ps aux」は、全てのユーザーの全てのプロセスを表示します。

a, u, xオプションの機能は以下のとおり

a: 全てのユーザーのプロセスを表示
u: 各プロセスの実行ユーザーやCPU、メモリ等の情報も表示
x: 全制御端末のプロセスを表示(制御端末のないデーモンのようなプロセス情報も表示)

$ ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.1  0.2 166928 10068 ?        Ss   22:32   0:02 /sbin/init splash
root           2  0.0  0.0      0     0 ?        S    22:32   0:00 [kthreadd]
root           3  0.0  0.0      0     0 ?        I<   22:32   0:00 [rcu_gp]
root           4  0.0  0.0      0     0 ?        I<   22:32   0:00 [rcu_par_gp]
root           5  0.0  0.0      0     0 ?        I<   22:32   0:00 [slub_flushwq]
root           6  0.0  0.0      0     0 ?        I<   22:32   0:00 [netns]
(略)
項目 内容
USER プロセスの所有ユーザー
PID プロセス番号
&CPU CPU占有率
&MEM 実メモリ占有率
SIZE 仮想分も含めたメモリの使用量(KB)
RSS 実メモリ上の使用量(KB)
TTY 端末名
STAT プロセスの状態
R 稼動中
S 一時停止中
D 停止不可能で一時停止
T 終了処理中
Z ゾンビプロセス(実体が無いプロセス)
W 実メモリ上に無く、スワップアウトしている
N nice値
START プロセスの開始時刻
TIME プロセスの総実行時間
COMMAND 実行コマンド名とパス

【使用例】「ps aux | grep」で実行中の特定のプロセスを確認

稼働中のプロセスの確認をする際によく使用されるのが「ps aux|grep プロセス名」というコマンドです。
検索したいプロセス名を入れて実行すると、そのプロセスが稼働しているかを確認できます。

【使用例】「ps axf」もしくは「pstree」コマンドでプロセスの親子関係をツリー状で表示

ps axf」で実行中の全てのプロセスの親子関係をツリー状で表示します。

sv1@sv1:~$ ps axf
    PID TTY      STAT   TIME COMMAND
      2 ?        S      0:01 [kthreadd]
      3 ?        I<     0:00  \_ [rcu_gp]
      4 ?        I<     0:00  \_ [rcu_par_gp]
      5 ?        I<     0:00  \_ [slub_flushwq]
      6 ?        I<     0:00  \_ [netns]
      8 ?        I<     0:01  \_ [kworker/0:0H-kblockd]
     11 ?        I<     0:00  \_ [mm_percpu_wq]

「pstree」コマンドでもプロセスの親子関係をツリー状で表示できます。ただし、表示形式は異なります。

sv1@sv1:~$ pstree
systemd─┬─ModemManager───2*[{ModemManager}]
        ├─NetworkManager───2*[{NetworkManager}]
        ├─accounts-daemon───2*[{accounts-daemon}]
        ├─acpid
        ├─apache2───8*[apache2]
        ├─at-spi-bus-laun─┬─dbus-daemon

【使用例】「ps -p 」もしくは「ps p」で特定のプロセスIDの情報のみ表示

プロセスIDが123のプロセスのみの情報を表示したい場合、以下のいずれかのコマンドを実行します。

$ ps -p 123

$ ps p 123

【使用例】「ps -l」もしくは「ps l」で親プロセスのPID、実行優先度(nice値)なども併せて表示

「ps -l」もしくは「ps l」で親プロセスのPID、実行優先度(nice値)なども併せて表示したい場合、以下のいずれかのコマンドを実行します。

$ ps -l

  UID   PID  PPID        F CPU PRI NI       SZ    RSS WCHAN     S             ADDR TTY           TIME CMD
  501 55466 55465    34006   0  31  0 34420840   3416 -      S                   0 ttys001    0:00.06 -zsh
$ ps l
  UID   PID  PPID CPU PRI NI      VSZ    RSS WCHAN  STAT   TT       TIME COMMAND
  501 55466 55465   0  31  0 34420840   3636 -      S    s001    0:00.06 -zsh

【使用例】「ps -ef」で完全なフォーマットで全てのプロセスを表示

「ps -ef」で完全なフォーマットで全てのプロセスを表示します。

$ ps -ef
  UID   PID  PPID   C STIME   TTY           TIME CMD
    0     1     0   0 水01PM ??        28:33.56 /sbin/launchd
    0   314     1   0 水01PM ??         6:48.66 /usr/libexec/logd
    0   316     1   0 水01PM ??         0:15.75 /usr/libexec/UserEventAgent (System)

【使用例】「ps u」でプロセスの実行ユーザ名も表示

「ps u」でプロセスの実行ユーザ名も表示します。

$ ps u
USER             PID  %CPU %MEM      VSZ    RSS   TT  STAT STARTED      TIME COMMAND
user01 55466   0.0  0.0 34429032   3588 s001  S     1:45PM   0:00.07 -z

【使用例】実行中のhttpdのプロセスを全て表示

現在実行中のhttpdのプロセスを全て表示するには、以下のいずれかのコマンドを使います。

$ ps ax | grep httpd | grep -v grep

単に「ps ax | grep httpd」を実行すると、検索のために実行したコマンドまで検索対象に含まれるため、抽出結果が1つ多くなります。
そのため、さらにパイプで「grep -v grep」を通すことで、grepを含むもの(検索のために実行したコマンド)を除外します。

【Linuxコマンド】grepでファイル内の文字列検索
Linuxコマンド「grep」でファイル内の文字列を検索する方法についてまとめました。

$ pgrep httpd

pgrepコマンドは、実行中のプロセスから特定の名前を持つプロセスIDを検索できます(検索対象から自身は除外)。

【Linux】プロセスIDの表示(pgrepコマンド)
LinuxでプロセスIDを表示(pgrepコマンド)する方法についてまとめました。

関連記事

【Linux超入門】システムの基礎とよく使うコマンドなど徹底解説
Linuxシステムの基礎とよく使うコマンドなどについて入門者向けに解説します。
【LinuC】試験対策と例題まとめ
LinuCの試験対策と例題(学習サイト)についてまとめました。
LPICの試験対策と例題まとめ
LPICの試験対策と例題(学習サイト)についてまとめました。

コメント