この章では、Solaris の資源管理機能のうち、プロジェクトおよびタスク機能の使用方法について説明します。
この章の内容は次のとおりです。
プロジェクトとタスクの機能の概要については、第 2 章プロジェクトとタスク (概要)を参照してください。
これらの機能をゾーンがインストールされている Solaris システムで使用する場合は、非大域ゾーンでこれらのコマンドを実行すると、プロセス ID を受け取るシステムコールインタフェースを通して、同じゾーン内のプロセスだけが認識されます。
タスク |
説明 |
説明 |
---|---|---|
プロジェクトとタスクで使用するコマンドとオプションの例を表示します。 |
タスク ID とプロジェクト ID を表示し、システムで現在実行されているプロセスとプロジェクトについて各種の統計情報を表示します。 | |
プロジェクトを定義します。 |
/etc/project ファイルにプロジェクトエントリを追加し、そのエントリの値を変更します。 | |
プロジェクトを削除します。 |
/etc/project ファイルからプロジェクトエントリを削除します。 | |
project ファイルまたはプロジェクトデータベースを検証します。 |
/etc/project ファイルの構文を検査します。または、外部のネームサービスと照合してプロジェクト名およびプロジェクト ID の一意性を確認します。 | |
プロジェクトのメンバーシップ情報を取得します。 |
起動中のプロセスの現在のプロジェクトメンバーシップを表示します。 | |
新しいタスクを作成します。 |
newtask コマンドを使用して、特定のプロジェクトに新しいタスクを作成します。 | |
実行中のプロセスを別のタスクとプロジェクトに関連付けます。 |
指定されたプロジェクト内の新しいタスク ID にプロセス番号を関連付けます。 | |
プロジェクト属性を追加し、操作します。 |
プロジェクトデータベースの管理コマンドを使用して、プロジェクト属性の追加、編集、検証、および削除を行います。 |
この節では、プロジェクトとタスクで使用するコマンドとオプションの例を示します。
タスクおよびプロジェクトの ID を表示するには、ps コマンドに -o オプションを付けて実行します。たとえば、プロジェクト ID を表示するには、次のように入力します。
# ps -o user,pid,uid,projid USER PID UID PROJID jtd 89430 124 4113 |
ユーザーおよびグループ ID に加えて、現在のプロジェクト ID を表示するには、id コマンドに -p オプションを付けて実行します。user オペランドを指定した場合、そのユーザーの通常のログインに関連付けられたプロジェクトが表示されます。
# id -p uid=124(jtd) gid=10(staff) projid=4113(booksite) |
特定のリスト内のプロジェクト ID と一致するプロセスだけを表示するには、pgrep コマンドと pkill コマンドに -J オプションを付けて実行します。
# pgrep -J projidlist # pkill -J projidlist |
特定のリスト内のタスク ID と一致するプロセスだけを表示するには、pgrep コマンドと pkill コマンドに -T オプションを付けて実行します。
# pgrep -T taskidlist # pkill -T taskidlist |
システムで現在実行中のプロセスとプロジェクトのさまざまな統計情報を表示するには、prstat コマンドに -J オプションを付けて実行します。
% prstat -J PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP 21634 jtd 5512K 4848K cpu0 44 0 0:00.00 0.3% prstat/1 324 root 29M 75M sleep 59 0 0:08.27 0.2% Xsun/1 15497 jtd 48M 41M sleep 49 0 0:08.26 0.1% adeptedit/1 328 root 2856K 2600K sleep 58 0 0:00.00 0.0% mibiisa/11 1979 jtd 1568K 1352K sleep 49 0 0:00.00 0.0% csh/1 1977 jtd 7256K 5512K sleep 49 0 0:00.00 0.0% dtterm/1 192 root 3680K 2856K sleep 58 0 0:00.36 0.0% automountd/5 1845 jtd 24M 22M sleep 49 0 0:00.29 0.0% dtmail/11 1009 jtd 9864K 8384K sleep 49 0 0:00.59 0.0% dtwm/8 114 root 1640K 704K sleep 58 0 0:01.16 0.0% in.routed/1 180 daemon 2704K 1944K sleep 58 0 0:00.00 0.0% statd/4 145 root 2120K 1520K sleep 58 0 0:00.00 0.0% ypbind/1 181 root 1864K 1336K sleep 51 0 0:00.00 0.0% lockd/1 173 root 2584K 2136K sleep 58 0 0:00.00 0.0% inetd/1 135 root 2960K 1424K sleep 0 0 0:00.00 0.0% keyserv/4 PROJID NPROC SIZE RSS MEMORY TIME CPU PROJECT 10 52 400M 271M 68% 0:11.45 0.4% booksite 0 35 113M 129M 32% 0:10.46 0.2% system Total: 87 processes, 205 lwps, load averages: 0.05, 0.02, 0.02 |
システムで現在実行中のプロセスとタスクのさまざまな統計情報を表示するには、prstat コマンドに -T オプションを付けて実行します。
% prstat -T PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP 23023 root 26M 20M sleep 59 0 0:03:18 0.6% Xsun/1 23476 jtd 51M 45M sleep 49 0 0:04:31 0.5% adeptedit/1 23432 jtd 6928K 5064K sleep 59 0 0:00:00 0.1% dtterm/1 28959 jtd 26M 18M sleep 49 0 0:00:18 0.0% .netscape.bin/1 23116 jtd 9232K 8104K sleep 59 0 0:00:27 0.0% dtwm/5 29010 jtd 5144K 4664K cpu0 59 0 0:00:00 0.0% prstat/1 200 root 3096K 1024K sleep 59 0 0:00:00 0.0% lpsched/1 161 root 2120K 1600K sleep 59 0 0:00:00 0.0% lockd/2 170 root 5888K 4248K sleep 59 0 0:03:10 0.0% automountd/3 132 root 2120K 1408K sleep 59 0 0:00:00 0.0% ypbind/1 162 daemon 2504K 1936K sleep 59 0 0:00:00 0.0% statd/2 146 root 2560K 2008K sleep 59 0 0:00:00 0.0% inetd/1 122 root 2336K 1264K sleep 59 0 0:00:00 0.0% keyserv/2 119 root 2336K 1496K sleep 59 0 0:00:02 0.0% rpcbind/1 104 root 1664K 672K sleep 59 0 0:00:03 0.0% in.rdisc/1 TASKID NPROC SIZE RSS MEMORY TIME CPU PROJECT 222 30 229M 161M 44% 0:05:54 0.6% group.staff 223 1 26M 20M 5.3% 0:03:18 0.6% group.staff 12 1 61M 33M 8.9% 0:00:31 0.0% group.staff 1 33 85M 53M 14% 0:03:33 0.0% system Total: 65 processes, 154 lwps, load averages: 0.04, 0.05, 0.06 |
-J オプションと -T オプションを一緒に使用することはできません。
cron コマンドは、settaskid を発行し、実行を要求したユーザーの適切なデフォルトプロジェクトを使用して、cron、at、および batch の各ジョブが別のタスクで実行されるようにします。また、at および batch コマンドは、現在のプロジェクト ID を取得して at ジョブを実行するときにプロジェクト ID が復元されるようにします。
su コマンドは、ログインのシミュレーションの一環として、新しいタスクを作成することによってターゲットユーザーのデフォルトプロジェクトに参加します。
su コマンドを使用してユーザーのデフォルトプロジェクトを切り替えるには、次のように入力します。
# su user |
次の例は、projadd コマンドを使用してプロジェクトエントリを追加し、projmod コマンドを使用してそのエントリを変更する方法を示します。
スーパーユーザーになるか、同等の役割を引き受けます。
役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (基本編)』の「Solaris 管理ツールを RBAC と組み合わせて使用する (作業マップ)」を参照してください。
projects -l を使用して、システムのデフォルトの /etc/project ファイルを表示します。
# projects -l system:0:::: user.root:1:::: noproject:2:::: default:3:::: group.staff:10::::system projid : 0 comment: "" users : (none) groups : (none) attribs: user.root projid : 1 comment: "" users : (none) groups : (none) attribs: noproject projid : 2 comment: "" users : (none) groups : (none) attribs: default projid : 3 comment: "" users : (none) groups : (none) attribs: group.staff projid : 10 comment: "" users : (none) groups : (none) attribs: |
booksite という名前のプロジェクトを追加します。追加したプロジェクトを mark という名前のユーザーにプロジェクト ID 番号 4113 で割り当てます。
# projadd -U mark -p 4113 booksite |
再度 /etc/project ファイルを表示します。
# projects -l system projid : 0 comment: "" users : (none) groups : (none) attribs: user.root projid : 1 comment: "" users : (none) groups : (none) attribs: noproject projid : 2 comment: "" users : (none) groups : (none) attribs: default projid : 3 comment: "" users : (none) groups : (none) attribs: group.staff projid : 10 comment: "" users : (none) groups : (none) attribs: booksite projid : 4113 comment: "" users : mark groups : (none) attribs: |
comment フィールドにプロジェクトを説明するコメントを追加します。
# projmod -c `Book Auction Project' booksite |
/etc/project ファイルに加えた変更を確認します。
# projects -l system projid : 0 comment: "" users : (none) groups : (none) attribs: user.root projid : 1 comment: "" users : (none) groups : (none) attribs: noproject projid : 2 comment: "" users : (none) groups : (none) attribs: default projid : 3 comment: "" users : (none) groups : (none) attribs: group.staff projid : 10 comment: "" users : (none) groups : (none) attribs: booksite projid : 4113 comment: "Book Auction Project" users : mark groups : (none) attribs: |
プロジェクト、タスク、およびプロセスをプールに結合する方法については、「プール属性の設定とプールへの結合」を参照してください。
次の例は、projdel コマンドを使ってプロジェクトを削除する方法を示します。
スーパーユーザーになるか、同等の役割を引き受けます。
役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (基本編)』の「Solaris 管理ツールを RBAC と組み合わせて使用する (作業マップ)」を参照してください。
projdel コマンドを使ってプロジェクト booksite を削除します。
# projdel booksite |
/etc/project ファイルを表示します。
# projects -l system projid : 0 comment: "" users : (none) groups : (none) attribs: user.root projid : 1 comment: "" users : (none) groups : (none) attribs: noproject projid : 2 comment: "" users : (none) groups : (none) attribs: default projid : 3 comment: "" users : (none) groups : (none) attribs: group.staff projid : 10 comment: "" users : (none) groups : (none) attribs: |
ユーザー名 mark でログインして、projects と入力し、このユーザーに割り当てられているプロジェクトを表示します。
# su - mark # projects default |
編集オプションが指定されていない場合、projmod コマンドは project ファイルの内容を検証します。
NIS マップを検証するには、スーパーユーザーとして次のように入力します。
# ypcat project | projmod -f — |
ypcat project | projmod -f — コマンドはまだ実装されていません。
/etc/project ファイルの構文を検査するには、次のように入力します。
# projmod -n |
-p フラグを付けて id コマンドを使用し、起動中のプロセスの現在のプロジェクトメンバーシップを表示します。
$ id -p uid=100(mark) gid=1(other) projid=3(default) |
作成先となるプロジェクト booksite のメンバーとしてログインします。
booksite プロジェクト内に新しいタスクを作成します。 それには、システムのタスク ID を取得するための -v (冗長) オプションを指定して newtask コマンドを実行します。
machine% newtask -v -p booksite 16 |
newtask を実行すると、指定したプロジェクト内に新しいタスクが作成され、そのタスクにユーザーのデフォルトのシェルが置かれます。
起動中のプロセスの現在のプロジェクトメンバーシップを表示します。
machine% id -p uid=100(mark) gid=1(other) projid=4113(booksite) |
今度は、プロセスが新しいプロジェクトのメンバーになっています。
次の例は、実行中のプロセスを別のタスクと新しいプロジェクトに関連付ける方法を示します。この操作を実行するには、スーパーユーザーでなければなりません。または、プロセスの所有者で、かつ新しいプロジェクトのメンバーでなければなりません。
スーパーユーザーになるか、同等の役割を引き受けます。
役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (基本編)』の「Solaris 管理ツールを RBAC と組み合わせて使用する (作業マップ)」を参照してください。
プロセスの所有者または新しいプロジェクトのメンバーであれば、この手順は省略できます。
book_catalog プロセスのプロセス ID を取得します。
# pgrep book_catalog 8100 |
プロセス 8100 を、新しいタスク ID を使って booksite プロジェクトに関連付けます。
# newtask -v -p booksite -c 8100 17 |
-c オプションは、newtask が指定された既存のプロセスに対して動作することを指定します。
タスクとプロセス ID の対応を確認します。
# pgrep -T 17 8100 |
プロジェクトデータベースの管理コマンド projadd および projmod を使用して、プロジェクト属性を編集できます。
-K オプションは、属性の置換リストを指定します。属性はセミコロン (;) で区切られます。-K オプションを -a オプションとともに使用すると、その属性または属性値が追加されます。-K オプションを -r オプションとともに使用すると、その属性または属性値が削除されます。-K オプションを -s オプションとともに使用すると、その属性または属性値が置換されます。
プロジェクトの属性に値を追加するには、projmod コマンドに -a オプションと -K オプションを付けて実行します。属性が存在しない場合は、新たに作成されます。
スーパーユーザーになるか、同等の役割を引き受けます。
役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (基本編)』の「Solaris 管理ツールを RBAC と組み合わせて使用する (作業マップ)」を参照してください。
プロジェクト myproject 内に task.max-lwps 資源制御属性を値なしで追加します。プロジェクトに加わるタスクでは、その属性にシステム値だけが設定されます。
# projmod -a -K task.max-lwps myproject |
その後、プロジェクト myproject 内の task.max-lwps に値を追加できます。この値は、特権レベル、しきい値、およびしきい値に達したときのアクションから成ります。
# projmod -a -K "task.max-lwps=(priv,100,deny)" myproject |
資源制御は複数の値を持つことができるので、同じオプションを使用して、既存の値リストに別の値を追加できます。
# projmod -a -K "task.max-lwps=(priv,1000,signal=KILL)" myproject |
複数の値はコンマで区切られます。task.max-lwps エントリはこの時点で次のようになっています。
task.max-lwps=(priv,100,deny),(priv,1000,signal=KILL) |
この手順では次の値を仮定します。
task.max-lwps=(priv,100,deny),(priv,1000,signal=KILL) |
スーパーユーザーになるか、同等の役割を引き受けます。
役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (基本編)』の「Solaris 管理ツールを RBAC と組み合わせて使用する (作業マップ)」を参照してください。
プロジェクト myproject 内の資源制御 task.max-lwps から属性値を削除するには、projmod コマンドに -r オプションと -K オプションを付けて実行します。
# projmod -r -K "task.max-lwps=(priv,100,deny)" myproject |
task.max-lwps が次のように複数の値を持っているとします。
task.max-lwps=(priv,100,deny),(priv,1000,signal=KILL) |
この場合は、最初に一致する値が削除されます。したがって、結果は次のようになります。
task.max-lwps=(priv,1000,signal=KILL) |
資源制御 task.max-lwps をプロジェクト myproject から削除するには、projmod コマンドに -r オプションと -K オプションを付けて実行します。
スーパーユーザーになるか、同等の役割を引き受けます。
役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (基本編)』の「Solaris 管理ツールを RBAC と組み合わせて使用する (作業マップ)」を参照してください。
属性 task.max-lwps とそのすべての値を、プロジェクト myproject から削除します。
# projmod -r -K task.max-lwps myproject |
プロジェクト myproject 内の資源制御 task.max-lwps の属性値を別の値で置換するには、projmod コマンドに -s オプションと -K オプションを付けて実行します。属性が存在しない場合は、新たに作成されます。
スーパーユーザーになるか、同等の役割を引き受けます。
役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (基本編)』の「Solaris 管理ツールを RBAC と組み合わせて使用する (作業マップ)」を参照してください。
task.max-lwps の現在の値を、次に示す新しい値で置換します。
# projmod -s -K "task.max-lwps=(priv,100,none),(priv,120,deny)" myproject |
結果は次のようになります。
task.max-lwps=(priv,100,none),(priv,120,deny) |
スーパーユーザーになるか、同等の役割を引き受けます。
役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (基本編)』の「Solaris 管理ツールを RBAC と組み合わせて使用する (作業マップ)」を参照してください。
task.max-lwps の現在の値をプロジェクト myproject から削除するには、次のように入力します。
# projmod -s -K task.max-lwps myproject |