プロセス階層、プロセスグループ、セッションを確認するには?

psコマンドでプロセスツリーを表示し、プロセスグループ、セッション情報を確認する方法をまとめました。
 プロセスグループ、セッションとは何か?についてもコマンドの説明の後にまとめました。

(1)psコマンドの書式


 
psコマンドに下記オプションを指定します。
 
ps -ejH
 
※オプションの説明
-e
 全てのプロセスを選択する。-Aと等しい。
-j
 jobsフォーマット。
-H
 プロセスを階層表示する
 

(2)表示される項目


 
PID:プロセスのプロセスID番号
PGID:プロセスグループID。(プロセスグループリーダのプロセスIDと等しい。)
SID:セッションID。(セッションリーダのプロセスID と等しい。)
TTY:制御端末(tty)
TIME:累積したCPU 時間
CMD:実行コマンド
 

(3)プロセスグループとは?


 
・一つ以上のプロセスの集まり。
・各プロセスグループには、一意なプロセスグループIDが付いている。
・プロセスグループIDとプロセスIDが等しいプロセスが、プロセスグループリーダ。
・プロセスグループリーダはプロセスグループを作成し、グループ内にプロセスを作成したり終了したりできる。
・プロセスグループのプロセスは、普通、シェルのパイプラインでプロセスグループにまとめられている。
 

(4)セッションとは?


 
セッションは、一つ以上のプロセスグループの集まりです。
実際にpsコマンドでプロセスツリーを表示してみます。
 
①psコマンドでプロセスツリーを表示し、プロセスグループ、セッションを確認
 

$ ps -ejH
  PID  PGID   SID TTY          TIME CMD
20412 20412 20412 ?        00:00:00   httpd
20414 20414 20414 ?        00:00:00     PassengerWatchd
20417 20417 20414 ?        00:00:00       PassengerHelper
20419 20417 20414 ?        00:00:11         ruby
20422 20422 20414 ?        00:00:00       PassengerLoggin
20429 20412 20412 ?        00:00:07     httpd
20430 20412 20412 ?        00:00:08     httpd

 
上記のようにプロセスがプロセスの親子関係を基に階層表示されます。プロセスグループが複数のプロセス、セッションが複数のプロセスグループで構成されている事が分かるかと思います。
 
②セッションリーダを確認
 
sshのターミナルウィンドウで”tail -f msg | grep test”を実行した場合のプロセス階層を表示してみます。
 
①の”ps -ejH”では、親プロセスIDが表示されないので、psコマンドで個別に表示項目を指定して親プロセスIDも表示してみます。

$ ps -eo pid,pgid,sid,ppid,cmd -H
  PID  PGID   SID  PPID CMD

13785 13785 13785     1   /usr/sbin/sshd
19237 19237 19237 13785     sshd: rails [priv]
19279 19237 19237 19237       sshd: rails@pts/1
19280 19280 19280 19279         -bash
20069 20069 19280 19280           tail -f msg
20070 20069 19280 19280           grep test

“bash”のプロセスがセッションリーダーとなって、”tail -f msg | grep test”のプロセスグループを実行していることが読み取れます。

関連記事の目次

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です