Linuxコマンドを勉強~ps その1~

前回紹介したpstreeコマンドに”-p”オプションを付けると、
ツリー構造のプロセスにプロセスIDが付きます。

initプロセスのPIDが1と分かります。

ps

psコマンドは実行中のプロセスを確認できます。
書式は簡単です。

psコマンドのオプションは3種類あります。
①UNIXオプション ・・・ ダッシュ付きのオプションです。
②BSDオプション ・・・ ダッシュなしのオプションです。
③GNUロングオプション ・・・ –など、ダッシュが2つ付くオプションです。

代表的なオプションを比較して並べてみます。

用途 UNIX BSD 備考
すべてのプロセスを表示 -e a すべてといえばすべてだけど表示内容が違います。詳しくは下で
詳細情報も表示 -f u 表示内容は結構違います・・・
制御端末のないプロセスを表示 -x x 内容同じです
長いフォーマットで詳細表示 -l l 表記が違うようです
プロセスを指定 -p PID p PID 表示内容は同じ
フォーマットを変えて表示 -o 表示したい項目名, … o 表示したい項目名, … フォーマットは随時紹介

結構違うのが”-e”と”a”、”-f”と”u”でしょうか。
“-e”についてはBSDの”e”オプションというものがあり、こちらはコマンドの後ろに環境を表示する、という全然別の用途をもったオプションなので余計ややこしくなっています。ダッシュの付け忘れに注意ですね。

また、①~③は1つのコマンドで同時に使うこともできます。

とにかくどういった情報を表示するのか試してみます。

psコマンドをオプションなしで実行すると、ユーザが実行中のプロセスが簡易表示されます。

1つのターミナルでpsコマンドを実行しただけなので、前回勉強した通り、bashプロセスとpsコマンドのプロセスが実行されています。

ということで、前回同様、もう1つターミナルを起動して「tail -f」を実行しつつ、元のターミナルでpsコマンドを実行します。

・・・表示が変わりません。

そこでもう1つのターミナルのtailコマンドを中断し、そちらのターミナルでpsコマンドを実行します。

表示内容が同じように見えますが、「TTY」の項目内容が違うことが分かります。こちらは「pts/1」となっています。

マニュアルを読むと、「デフォルトでは、psコマンドはカレントユーザーと同じ実効ユーザID(EUID)を持ち、かつ呼び出した端末と同じ端末に関連づけられている全てのプロセスを表示する」とあります。

以前パーミッションの勉強をしたときに、パーミッションに「4000」を付加するとSUIDがファイルに付与され、ファイルの所有者権限で別のユーザがファイルを実行できると言いましたが、これは正確に言うと、「ファイルの実効ユーザIDをファイルの所有者IDに変更してファイルを実行する」ということになります。

実はプロセスには、プロセスを起動したユーザID(実ユーザID)とプログラムを実行するときの権限を持つユーザのID(実効ユーザID)が設定されています。プログラムを実行するときの権限とは、前回勉強したとおり、カーネルを通してプログラムを実行するときのことです。
だからこそ、SUIDを設定したファイルはプロセスを実行したユーザとは別ユーザの権限で実行できるのです。

psコマンドのデフォルトはさらに、呼び出した端末と同じ端末に関連付けられているプロセスを表示する、とあります。
プロセスを呼び出した端末とは、例えばターミナルのことです。

つまり上記の例では、カレントユーザは同じだが別のターミナルでtailコマンドを実行しているため、psコマンドのデフォルトでtailプロセスが表示されなかったのです。

「TTY」は、そのプロセスを制御している端末を表します。
今表示されている「pts/1」や「pts/2」は、ssh接続などで遠隔ログインしたりすると接続される仮想端末のことだそうで、/dev以下にあるデバイスの1つです。「pts/1」は、「/dev/pts/1」というデバイスファイルを示しています。

現在開いているターミナルがどの端末に接続されているかは、ttyコマンドを実行すれば確認できます。

他の表示項目としては、
「PID」がプロセスID、「TIME」はプロセスが起動してからのCPU時間、「CMD」は実行されているコマンドです。

次に、「ps a」を試します。BSDオプションの全表示ですね。

「TTY」項目に「tty1」などと書かれたプロセスが増えています。「tty」は、物理端末に接続されている場合に付くようです。
また、先ほど別端末で見れなかった現在開いている2つのターミナル(bashプロセス)が両方見ることが出来ています。

そして、「STAT」という項目が増えています。
「STAT」はプロセスの状態のことです。
これについては次回勉強、ということで。

今度は、「ps -e」を試します。UNIXオプションの全表示です。

PIDが1のinitプロセスからすべて表示されています。
「TTY」がクエスチョンマークになっているプロセスは、端末を介さず実行されたプロセスです。
initプロセスなどはカーネルが実行するのでなんとなく想像付きました。

「ps a」は「ps -e」のように端末制御のないプロセスを表示しませんが、それは”x”オプションと併用することで「ps -e」と同じ数のプロセスを表示することができます。

この「PID」「TTY」「STAT」「TIME」「COMMAND」などの表示項目は、
“-o”や”o”オプションで変えることができます。

psコマンドについては、まだまだ続きます。
今日はこの辺で。

広告
  • LINEで送る