今号では、ps コマンドの使い方やオプションについてご紹介します!
ps コマンドとは
ps コマンドは、現在 OS 上で動作している各プロセスを表示するコマンドです。
プロセス (1つ1つの処理の単位) の稼働時間や、実行されているコマンド等の情報を確認する事ができます。
Windows で言うところの、タスクマネージャーのようなものですね。
基本の書式
特に何も操作を行っていない状態から ps コマンドを実行した際に表示される結果は以下の通りです。
bash は現在 ps コマンドを実行しているシェル、ps は ps コマンドを表しています。
$ ps PID TTY TIME CMD 18650 pts/1 00:00:00 bash 18699 pts/1 00:00:00 ps
ここで、他のコマンドを実行してみると ps コマンドの実行結果にも変化があります。
以下の例では、sleep コマンドを 10秒間バックグラウンドで実行しています。
$ sleep 10 & [1] 30875 $ ps PID TTY TIME CMD 18650 pts/1 00:00:00 bash 30875 pts/1 00:00:00 sleep 30906 pts/1 00:00:00 ps
現在実行中の、sleep コマンドのプロセスが新たに表示されました。
10秒経過すると sleep コマンドのプロセスはなくなります。
ps コマンドのオプション
次に、ps コマンドで使用可能なオプションをご紹介します。
オプションには多くの種類がありますが、よく使用されると考えられるものを抜粋してご紹介します。
- すべてのプロセスを表示する
通常、ps コマンドでは自分が所有するプロセスのみが表示されますが、
-e オプションを指定すると、自分以外のすべてのユーザを含めた全プロセスの情報が表示されます。$ ps -e PID TTY TIME CMD 1 ? 00:02:36 systemd 2 ? 00:00:00 kthreadd 3 ? 00:00:29 ksoftirqd/0 5 ? 00:00:00 kworker/0:0H 7 ? 00:00:00 migration/0 (長いため省略) 15150 ? 00:00:00 kworker/0:2 15185 pts/2 00:00:00 ps 16786 ? 00:00:00 dhclient 19794 ? 00:00:00 kworker/u2:2 26248 ? 00:00:00 systemd-tty-ask
- プロセスを階層で表示する
プロセスは階層 (親プロセス、子プロセスと呼ぶこともあります) になっているものがあり、
その階層構造も含めて表示したい場合は f オプションを指定します。以下の例では、bash を複数起動した場合の階層を表示します。
f オプションがない場合とある場合とでは、実行結果が異なります。f オプションがない場合
$ ps PID TTY TIME CMD 17112 pts/1 00:00:00 bash 17271 pts/1 00:00:00 bash 17335 pts/1 00:00:00 bash 17577 pts/1 00:00:00 ps
f オプションがある場合
$ ps f PID TTY STAT TIME COMMAND 17112 pts/1 Ss 0:00 -bash 17271 pts/1 S 0:00 \_ bash 17335 pts/1 S 0:00 \_ bash 17614 pts/1 R+ 0:00 \_ ps f
- 他の端末を含めたプロセスを表示する
a オプションを指定すると、他の端末のプロセスも含めて表示されます。a オプションがない場合
$ ps PID TTY TIME CMD 17112 pts/1 00:00:00 bash 20734 pts/1 00:00:00 ps
a オプションがある場合
$ ps a PID TTY STAT TIME COMMAND 6004 tty1 Ssl+ 0:28 /usr/bin/X :0 -background none -noreset -audit 4 -ver 11678 pts/0 Ss+ 0:00 bash 17112 pts/1 Ss 0:00 -bash 20757 pts/1 R+ 0:00 ps a 30328 pts/2 Ss+ 0:00 -bash
- 端末を持たないプロセスも含めて表示する
x オプションを指定すると、端末を持たないプロセス (デーモンプロセスなど) も含めて表示します。# ps PID TTY STAT TIME COMMAND 1 ? Ss 2:42 /usr/lib/systemd/systemd --switched-root --system --d 2 ? S 0:00 [kthreadd] 3 ? S 0:33 [ksoftirqd/0] 5 ? S
- より詳細な情報を表示する
u オプションを指定すると、プロセスに関してより詳細な情報 (CPU 使用率やメモリ使用率等) を表示します。$ ps u USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND test01 21202 5.0 0.1 116364 2880 pts/2 Ss 14:19 0:00 -bash test01 21275 0.0 0.1 155360 1888 pts/2 R+ 14:19 0:00 ps u
実際の運用では、-e と f、a と x と u をそれぞれ組み合わせて使用する場合がほとんどです。
-ef オプションと axu オプションでは表示される内容が少し異なりますが、
どちらもシステム上のすべてのプロセスに関する情報を表示します。
- -e と f を組み合わせる
# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 7月20 ? 00:03:26 /usr/lib/systemd/systemd --switc root 2 0 0 7月20 ? 00:00:00 [kthreadd] root 3 2 0 7月20 ? 00:00:56 [ksoftirqd/0] root 5 2 0 7月20 ? 00:00:00 [kworker/0:0H] root 7 2 0 7月20 ? 00:00:00 [migration/0] (長いため省略) root 23697 2 0 14:22 ? 00:00:00 [kworker/0:0] root 26248 1 0 7月21 ? 00:00:00 /usr/bin/systemd-tty-ask-passwor root 29441 2 0 14:27 ? 00:00:00 [kworker/0:1] test01 30562 21202 0 14:28 pts/2 00:00:00 bash test01 30617 30562 0 14:28 pts/2 00:00:00 bash
- a と x と u を組み合わせる (各オプションの順番は任意)
# ps axu USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.2 128388 5520 ? Ss 7月20 3:26 /usr/lib/syst root 2 0.0 0.0 0 0 ? S 7月20 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 7月20 0:56 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S