本章介绍如何使用 Solaris 资源管理中的项目和任务功能。
本章包含以下主题:
有关项目和任务功能的概述,请参见第 2 章。
如果在安装了区域的 Solaris 系统上使用这些功能,则当这些功能命令在非全局区域 (non-global zone) 中运行时,只有同一区域中的进程才能通过使用进程 ID 的系统调用界面进行查看。
任务 |
说明 |
参考 |
---|---|---|
查看用于项目与任务的命令和选项的示例。 |
显示任务和项目 ID,显示系统上当前所运行进程和项目的各种统计信息。 | |
定义项目。 |
在 /etc/project 文件中添加项目条目并修改此条目的值。 | |
删除项目。 |
从 /etc/project 文件中删除项目条目。 | |
验证 project 文件或项目数据库。 |
检查 /etc/project 文件的语法或根据外部命名服务验证项目名称和项目 ID 的唯一性。 | |
获取项目成员身份信息。 |
显示发出调用的进程的当前项目成员身份。 | |
创建新任务。 |
使用 newtask 命令在特定项目中创建一项新任务。 | |
将正在运行的进程与不同的任务和项目进行关联。 |
将进程号与特定项目中的新任务 ID 进行关联。 | |
添加并使用项目属性。 |
使用项目数据库管理命令添加、编辑、验证和删除项目属性。 |
本节提供用于项目与任务的命令和选项的示例。
使用带有 -o 选项的 ps 命令可显示任务和项目 ID。例如,要查看项目 ID,请键入以下内容:
# ps -o user,pid,uid,projid USER PID UID PROJID jtd 89430 124 4113 |
使用带有 -p 选项的 id 命令可列显当前的项目 ID,以及用户和组 ID。如果提供了 user 操作数,则还会列显与该用户的正常登录相关联的项目:
# id -p uid=124(jtd) gid=10(staff) projid=4113(booksite) |
要仅将进程与特定列表中的项目 ID 进行匹配,请使用带有 -J 选项的 pgrep 和 pkill 命令:
# pgrep -J projidlist # pkill -J projidlist |
要仅将进程与特定列表中的任务 ID 进行匹配,请使用带有 -T 选项的 pgrep 和 pkill 命令:
# pgrep -T taskidlist # pkill -T taskidlist |
要显示系统上当前运行的进程和项目的各种统计信息,请使用带有 -J 选项的 prstat 命令:
% 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 |
要显示系统上当前运行的进程和任务的各种统计信息,请使用带有 -T 选项的 prstat 命令:
% 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 命令修改此条目。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:基本管理》中的“使用 RBAC 和 Solaris 管理工具(任务图)”。
使用 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: |
在注释字段中添加描述项目的注释。
# 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 命令删除项目。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:基本管理》中的“使用 RBAC 和 Solaris 管理工具(任务图)”。
使用 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 的成员身份登录。
使用带有 -v(详细)选项的 newtask 命令在 booksite 项目中创建新任务,以获取系统任务 ID。
machine% newtask -v -p booksite 16 |
通过执行 newtask,可以在指定项目中创建新任务并将用户的缺省 shell 置于此任务中。
查看发出调用的进程的当前项目成员身份。
machine% id -p uid=100(mark) gid=1(other) projid=4113(booksite) |
现在该进程成为新项目的成员。
此示例显示如何将正在运行的进程与不同的任务和新项目进行关联。要执行此操作,您必须是超级用户,或者是进程属主并且是新项目的成员。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:基本管理》中的“使用 RBAC 和 Solaris 管理工具(任务图)”。
如果您是进程属主或新项目成员,则可以跳过此步骤。
获取 book_catalog 进程的进程 ID。
# pgrep book_catalog 8100 |
将进程 8100 与 booksite 项目中的新任务 ID 进行关联。
# newtask -v -p booksite -c 8100 17 |
-c 选项指定 newtask 作用于现有的命名进程。
确认任务到进程 ID 的映射。
# pgrep -T 17 8100 |
您可以使用 projadd 和 projmod 项目数据库管理命令来编辑项目属性。
-K 选项指定属性替换列表。属性由分号 (;) 进行分隔。如果将 -K 选项和 -a 选项一起使用,则会添加属性或属性值。如果将 -K 选项和 -r 选项一起使用,则会删除属性或属性值。如果将 -K 选项与 -s 选项一起使用,则会替换属性或属性值。
可以使用带有 -a 和 -K 选项的 projmod 命令将值添加到项目属性中。如果属性不存在,则会创建一个。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:基本管理》中的“使用 RBAC 和 Solaris 管理工具(任务图)”。
在项目 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) |
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:基本管理》中的“使用 RBAC 和 Solaris 管理工具(任务图)”。
要删除 myproject 项目中 task.max-lwps 资源控制的属性值,请使用带有 -r 和 -K 选项的 projmod 命令。
# 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) |
要删除 myproject 项目中的 task.max-lwps 资源控制属性,请使用带有 -r 和 -K 选项的 projmod 命令。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:基本管理》中的“使用 RBAC 和 Solaris 管理工具(任务图)”。
从项目 myproject 中删除属性 task.max-lwps 及其所有值:
# projmod -r -K task.max-lwps myproject |
要替换项目 myproject 中属性 task.max-lwps 的值,请使用带有 -s 和 -K 选项的 projmod 命令。如果属性不存在,则会创建一个。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:基本管理》中的“使用 RBAC 和 Solaris 管理工具(任务图)”。
使用所示的新值替换当前的 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) |
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:基本管理》中的“使用 RBAC 和 Solaris 管理工具(任务图)”。
要从项目 myproject 中删除 task.max-lwps 的当前值,请键入:
# projmod -s -K task.max-lwps myproject |