このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Linuxコマンドの基本:プロセスを表示する:psコマンド

psコマンド

 コンピュータ上で動作しているプログラムは、プロセスと呼ばれる形で管理されています。Linuxでは、複数のプログラムを同時に実行できるマルチタスク機能を持っており、ユーザーは効率的に作業を進めることができます。ここでは、Linuxでプロセスを確認・管理するための基本的なコマンドであるpsコマンドについて解説します。

プロセスの概要

  • プロセス:実行中のプログラムのこと。ディスク上の実行ファイルがメモリに読み込まれ、CPUによって実行されている状態です。
  • プロセスID (PID):各プロセスには一意の識別番号であるPIDが割り当てられています。この番号を使用してプロセスを特定・操作します。
  • 実効ユーザー:プロセスには所有者(実効ユーザー)が設定されており、ファイルの所有者と同様にアクセス権限が管理されています。他のユーザーのプロセスを勝手に操作することはできません。

 同じコマンドから実行されたプロセスであっても、それぞれ独立したメモリ領域を持ち、データが混ざることはありません。これは、Linuxカーネルが各プロセスを適切に管理しているためです。

psコマンド:プロセスの表示

 psコマンドは、現在動作しているプロセスの情報を表示するためのコマンドです。引数なしで実行すると、現在のターミナルで実行しているプロセスのみが表示されます。

基本的な使い方

$ ps

出力結果

user01@ubuntu:~$ ps
    PID TTY          TIME CMD
   3970 pts/0    00:00:00 bash
  10964 pts/0    00:00:00 ps
  • PID:プロセスID
  • TTY:端末の種類
  • TIME:プロセスが使用したCPU時間
  • CMD:実行しているコマンド名

この例では、以下の2つのプロセスが表示されています。

  1. bash(PID: 3970):現在のシェル
  2. ps(PID: 10964):実行したpsコマンド

複数の同一プロセスの実行例

同じコマンドを複数回実行すると、それぞれ別のプロセスとして動作します。

例:xeyesアプリケーションを2つ起動

以下のコマンドを順に実行します。

user01@ubuntu:~$ xeyes &
[1] 11077
user01@ubuntu:~$ xeyes &
[2] 11078
user01@ubuntu:~$ ps
    PID TTY          TIME CMD
  11069 pts/0    00:00:00 bash
  11077 pts/0    00:00:00 xeyes
  11078 pts/0    00:00:00 xeyes
  11088 pts/0    00:00:00 ps
  • xeyes(PID: 11077、11078):同じxeyesプログラムを2つ起動していますが、プロセスIDが異なるため別々のプロセスとして認識されます。

プロセスの終了

killコマンドを使用して、プロセスIDを指定してプロセスを終了させます。

user01@ubuntu:~$ kill 11077
user01@ubuntu:~$ kill 11078

現在のターミナル以外のプロセスも表示する

例:xオプション

 他のターミナルで実行しているプロセスや、バックグラウンドで動作しているデーモンプロセスを表示するには、xオプションを使用します。

user01@ubuntu:~$ ps x

例:fオプション

さらに、プロセスの親子関係を視覚的に表示するために、fオプションを組み合わせます。

$ ps xf

プロセスの親子関係の表示

 GUI環境で2つのターミナルを起動し、1つ目のターミナルでxeyesを起動した状態で、以下のコマンドを実行します。

user01@ubuntu:~$ xeyes &
[1] 11179
user01@ubuntu:~$ ps xf

出力例

    PID TTY      STAT   TIME COMMAND
...(省略)... 
11132 ?        Ssl    0:02  \_ /usr/libexec/gnome-terminal-server
 11141 pts/0    Ss     0:00      \_ bash
 11179 pts/0    S      0:00          \_ xeyes
 11188 pts/0    R+     0:00          \_ ps xf
 11159 pts/1    Ss+    0:00      \_ bash

出力内容の解説

  • 11132/usr/libexec/gnome-terminal-server
    GNOMEターミナルのサーバープロセス。親プロセスとして動作しています。
  • 11141bash
    ターミナル上で動作しているシェル。gnome-terminal-serverの子プロセスです。
  • 11179xeyes
    シェルから起動されたxeyesプロセス。bashの子プロセスです。
  • 11188ps xf
    現在実行しているps xfコマンド。bashの子プロセスです。
  • 11159bash
    2つ目のターミナルで動作しているシェル。別のターミナル(pts/1)なので、pts/0のプロセスツリーとは別になっています。

 ツリー状の表示では、「 \_ 」やインデントで親子関係が示されています。インデントが深いほど、親プロセスから派生した子プロセスであることを示します。

すべてのプロセスの表示

 システム全体で動作しているすべてのプロセスを表示するには、aオプションとxオプションを組み合わせて使用します。

例:aオプションとxオプション

$ ps ax

例:aオプションとxオプションとuオプション

さらに詳細な情報を含めて表示するには、uオプションを追加します。

$ ps aux
  • aオプション:すべてのユーザーのプロセスを表示
  • xオプション:制御端末を持たないプロセスも表示(デーモンなど)
  • uオプション:詳細情報(ユーザー名、CPU使用率、メモリ使用率など)を表示

よく使われるオプション

psコマンドには多くのオプションがありますが、以下の組み合わせがよく使われます。

オプション意味
x現在のユーザーが実行しているすべてのプロセスを表示
ux現在のユーザーが実行しているすべてのプロセスを詳細情報付きで表示
axすべてのユーザーのプロセスを表示
auxすべてのユーザーのプロセスを詳細情報付きで表示
auxwwwauxオプションに加え、長いコマンドラインも右端で切れずにすべて表示
よく使われるオプション

補足

www:コマンドラインが長くターミナルの右端で切れてしまう場合に、表示幅を制限せずにすべて表示します。

例:長いコマンドラインも右端で切れずにすべて表示

$ ps auxwww

psコマンドの詳細なオプションについては、以下のコマンドでマニュアルを参照してください。

$ man ps

まとめ

  • プロセスは実行中のプログラムであり、psコマンドを使用して確認できます。
  • psコマンドは、オプションを組み合わせることで表示内容を柔軟にカスタマイズできます。
  • プロセスID(PID)を使用して、プロセスを特定・操作できます。
  • プロセスの親子関係を理解することで、システムの動作状況を把握できます。
  • よく使われるpsコマンドのオプションを覚えておくと、効率的にプロセス管理ができます。

 プロセスの状態を把握することは、システム管理やトラブルシューティングにおいて非常に重要です。psコマンドを活用して、現在動作しているプロセスを適切に管理しましょう。