Global Zone から Non Global Zone のプロセスを確認する方法 : やっぱり Sun がスキ! やっぱり Sun がスキ!

やっぱり Sun がスキ!

http://blogs.sun.com/yappri/date/20080925 2008年 9月 25日 木曜日

Global Zone から Non Global Zone のプロセスを確認する方法

今回は、Global Zone から Non Global Zone のプロセスを確認する方法を いくつか紹介します。

Zone が複数起動している環境で、どこの Zone でどんなプロセスが動作してい るか確認する方法の一つに、Global Zone から ps コマンドに -Z オプションを 付けて確認する方法があります。
# ps -efZ
    ZONE     UID   PID  PPID   C    STIME TTY         TIME CMD
  global    root     0     0   0 00:04:41 ?           0:16 sched
  global    root     1     0   0 00:04:48 ?           0:00 /sbin/init
....
....
  apache  daemon  3701     1   0 00:54:47 ?           0:00 /usr/lib/nfs/statd
 appserv  root    3549  3532   0 00:54:40 ?           0:00 /sbin/init
  global  root    3408   889   0 00:37:11 pts/2       0:00 /bin/sh -c dtpad -server
  apache  daemon  3719     1   0 00:54:47 ?           0:00 /usr/lib/nfs/lockd
 appserv  root    3618     1   0 00:54:43 ?           0:00 /usr/sbin/nscd
....
ps コマンドに -Z オプションを付与すると、最初のカラムにプロセスが動作して いる Zone 名が表示されます。

さらに特定の Zone で動作しているプロセスの一覧 を表示させる時は、ps -efZ の結果を Zone 名で grep して確認されている方も多いと思います。
# ps -efZ | grep apache
  apache  daemon  1041     1   0 22:09:39 ?           0:00 /usr/lib/crypto/kcfd
  apache    root   978     1   0 22:09:32 ?           0:00 zsched
  global    root   977     1   0 22:09:30 ?           0:00 zoneadmd -z apache
  apache    root   991   978   0 22:09:33 ?           0:00 /sbin/init
  apache    root   995     1   0 22:09:33 ?           0:03 /lib/svc/bin/svc.startd
....
....
しかし、-Z オプションは、 8 文字以上の Zone 名には対応していない為、 仮に Zone 名 appserver01 と appserver02 が存在した場合は grep で 特定の Zone 名をフィルタリングする事ができません。

[例] Zone 名 sgeexec01 と sgeexec02 が起動している時の場合
# ps -efZ | grep svc.conf
  global    root     9     1   0 22:03:21 ?           0:06 /lib/svc/bin/svc.configd
sgeexec0    root  2102     1   0 22:15:24 ?           0:05 /lib/svc/bin/svc.configd
sgeexec0    root  2244     1   0 22:15:32 ?           0:05 /lib/svc/bin/svc.configd
そんな時は、少し面倒ですが、ps コマンドに -o zone オプションを付与して結果を 表示させる事で解決できます。
# ps -ef -o zone,pid,tty,comm | grep svc.conf
  global      9 ?       /lib/svc/bin/svc.configd
sgeexec01  2102 ?       /lib/svc/bin/svc.configd
sgeexec02  2244 ?       /lib/svc/bin/svc.configd
これで 8 文字以上の Zone 名が存在している場合でも grep でフィルタリングが可能に なりました。

その他、grep を使わないで Global Zone から特定の Non Global Zone で動作している プロセスの一覧を確認する方法として zlogin を使用する事もあります。
# zlogin sgeexec01 ps -ef
     UID   PID  PPID   C    STIME TTY         TIME CMD
    root  2085  2085   0 22:15:24 ?           0:00 zsched
    root  2815  2085   0 22:20:07 ?           0:00 sh -c ps -ef 
    root  2566  2564   0 22:15:41 ?           0:00 /usr/lib/autofs/automountd
    root  2611  2085   0 22:15:42 ?           0:00 /usr/sbin/syslogd
    root  2564  2085   0 22:15:41 ?           0:00 /usr/lib/autofs/automountd
....
....
zlogin コマンドは、ゾーンにログインする為だけのコマンドではなく、 引数にゾーン上で実行するコマンドを指定する事で Global Zone から簡単に Non Global Zone のコマンド実行が可能です。

今回は、 Zone 用にエンハンスされた ps コマンドを中心に説明しましたが、pgrep コ マンドや、 pkill コマンドも Zone 対応されておりますのでその使い方を紹介します。
# pgrep sshd
579
2539
3092

# pgrep -z apache sshd
2539
これと同じ使い方で pkill も使えます。
# pkill -z apache sshd

投稿されたコメント:

コメント
  • HTML文法 不許可