Solaris container - Project and Task

来源:互联网 发布:打开vs2012的数据库 编辑:程序博客网 时间:2024/06/05 05:25

1.  系统如何确定用户的缺省项目?

要登录到系统,必须为用户指定一个缺省项目。即使用户不在缺省项目中指定的用户或组列表中,此用户仍会自动成为该项目的成员。根据getdefaultproj()库函数逻辑,系统按顺序执行以下步骤,以确定用户的缺省项目:

1)        如果用户在 /etc/user_attr 扩展用户属性数据库中为某个条目定义了 project 属性,则 project 属性的值即为缺省项目。

2)        如果 project 数据库中存在名为 user.user-id 的项目,则此项目即为缺省项目。

3)        如果 project 数据库中存在名为 group.group-name 的项目,其中 group-name 是在 passwd 文件中指定的用户缺省组的名称,则此项目即为缺省项目。

4)        如果 project 数据库中存在特殊的项目 default,则此项目即为缺省项目。

2.  项目,任务和进程的关系

3 查看系统中的projecttask信息:

ps: 使用带有 -o 选项的 ps 命令可显示任务和项目 ID

-bash-3.00# ps -o user,pid,uid,projid,taskid

    USER   PID   UID PROJID TASKID

    root 29506     0     1    80

root 29511     0     1    80

id: 使用带有 -p 选项的 id 命令可列显当前的项目 ID,以及用户和组 ID。如果提供了 user 操作数,则还会列显与该用户的正常登录相关联的项目:

-bash-3.00# id -p

uid=0(root) gid=0(root) projid=1(user.root)

pgrep, pkill: 将进程与特定列表中的项目ID进行匹配,带有 -J 选项的 pgrep pkill 命令:

# pgrep -J projidlist

# pkill -J projidlist

将进程与特定列表中的任务ID进行匹配,带有 -T 选项的 pgrep pkill 命令:

# pgrep -T taskidlist

# pkill -T taskidlist

prstat:

-bash-3.00# prstat -J

   PID USERNAME  SIZE   RSS STATE  PRI NICE      TIME  CPU PROCESS/NLWP

  7941 root      114M   36M sleep   59    0   0:00:14 0.1% java/18

 29514 root     4908K 2996K cpu1    49    0   0:00:00 0.1% prstat/1

  7699 root      111M   26M sleep   59    0   0:00:07 0.1% mixer_applet2/1

 18054 root      111M   26M sleep   59    0   0:00:07 0.1% mixer_applet2/1

  2999 noaccess   93M   65M sleep   59    0   0:00:18 0.1% java/26

  6363 root       69M   55M sleep   59    0   0:00:15 0.1% java/21

  1981 root       14M   11M sleep   59    0   0:00:30 0.1% Xvnc/1

 29441 root       97M   22M sleep   59    0   0:00:10 0.0% gnome-terminal/2

  7628 root       78M   57M sleep   59    0   0:00:16 0.0% java/28

 23362 root      179M   72M sleep   59    0   0:00:25 0.0% firefox-bin/7

 29506 root     3232K 1996K sleep   49    0   0:00:00 0.0% bash/1

 17734 root      112M   27M sleep   59    0   0:00:01 0.0% gnome-panel/1

  1672 root     2588K 1156K sleep   59    0   0:00:00 0.0% in.routed/1

  2563 root       48M   31M sleep   59    0   0:00:09 0.0% Xorg/1

  1762 root     6620K 3172K sleep   59    0   0:00:00 0.0% nscd/26

     9 root       11M 9608K sleep   59    0   0:00:14 0.0% svc.configd/19

  1502 root     3084K 1624K sleep   59    0   0:00:00 0.0% hald-runner/1

  2558 root       10M 3884K sleep   59    0   0:00:00 0.0% dtlogin/1

 29443 root     2908K 1924K sleep   59    0   0:00:00 0.0% bash/1

   115 root     1580K 1060K sleep   59    0   0:00:00 0.0% powerd/3

   102 root     3240K 1852K sleep   59    0   0:00:00 0.0% picld/3

 29442 root     1952K 1064K sleep   59    0   0:00:00 0.0% gnome-pty-helpe/1

  1376 root     3144K 1328K sleep   59    0   0:00:00 0.0% cron/1

    98 daemon   8796K 4132K sleep   59    0   0:00:00 0.0% kcfd/3

PROJID    NPROC  SWAP   RSS MEMORY      TIME  CPU PROJECT

     1       64  311M  516M    25%   0:01:34 0.5% user.root

     0       48  208M  194M   9.5%   0:01:44 0.2% system

     3        2 1488K 4748K   0.2%   0:00:00 0.0% default

 

 

Total: 114 processes, 337 lwps, load averages: 0.03, 0.04, 0.06

 

cron 命令将发出 settaskid,以确保每个 cronat batch 作业都是在单独的任务中执行,并对提交用户使用了适当的缺省项目。at batch 命令也会捕获当前项目 ID,以确保在运行 at 作业时恢复项目 IDsu 命令通过创建新任务加入目标用户的缺省项目,作为模拟登录的一部分。

4. 添加,删除一个project

添加名为 booksite 的项目。将该项目指定给名为 mark 的用户,同时指定项目 ID 4113

-bash-3.00# projadd -U user -p 4113 build

-bash-3.00# projmod -c 'opensolaris build user' build

-bash-3.00# 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:

build

        projid : 4113

        comment: "opensolaris build user"

        users  : user

        groups : (none)

        attribs:

-bash-3.00# projdel build

-bash-3.00# 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:

5.在指定的project中创建新任务

系统中为user用户创建了build project,现在需要在build中以user用户创建一个task

user的身份登陆,并运行如下命令:

-bash-3.00$ id -p

uid=65535(user) gid=1(other) projid=3(default)

-bash-3.00$ projects

default build

-bash-3.00$ newtask -v -p build

94

bash-3.00$ id -p

uid=65535(user) gid=1(other) projid=100(build)

bash-3.00$ prstat -J

   PID USERNAME  SIZE   RSS STATE  PRI NICE      TIME  CPU PROCESS/NLWP

 29600 user     6004K 3480K cpu0    59    0   0:00:00 0.3% prstat/1

  7941 root      114M   36M sleep   59    0   0:00:17 0.1% java/18

 18054 root      111M   26M sleep   59    0   0:00:10 0.1% mixer_applet2/1

  7699 root      111M   26M sleep   59    0   0:00:10 0.1% mixer_applet2/1

  6363 root       69M   55M sleep   59    0   0:00:18 0.1% java/21

  2999 noaccess   93M   65M sleep   59    0   0:00:20 0.1% java/26

  7628 root       78M   57M sleep   59    0   0:00:18 0.0% java/28

 23362 root      179M   72M sleep   59    0   0:00:26 0.0% firefox-bin/7

  1981 root       14M   11M sleep   59    0   0:00:32 0.0% Xvnc/1

 20129 root     6432K 4260K sleep   59    0   0:00:00 0.0% xscreensaver/1

 29596 user     3228K 1980K sleep   59    0   0:00:00 0.0% bash/1

 29441 root       97M   22M sleep   59    0   0:00:11 0.0% gnome-terminal/2

 17734 root      112M   27M sleep   59    0   0:00:02 0.0% gnome-panel/1

  1762 root     6620K 3192K sleep   59    0   0:00:00 0.0% nscd/26

  1502 root     3084K 1624K sleep   59    0   0:00:00 0.0% hald-runner/1

  2558 root       10M 3884K sleep   59    0   0:00:00 0.0% dtlogin/1

 29443 root     2908K 1928K sleep   59    0   0:00:00 0.0% bash/1

   115 root     1580K 1060K sleep   59    0   0:00:00 0.0% powerd/3

   102 root     3240K 1852K sleep   59    0   0:00:00 0.0% picld/3

 29442 root     1952K 1064K sleep   59    0   0:00:00 0.0% gnome-pty-helpe/1

  1376 root     3152K 1336K sleep   59    0   0:00:00 0.0% cron/1

    98 daemon   8796K 4132K sleep   59    0   0:00:00 0.0% kcfd/3

    90 root     5640K 2300K sleep   59    0   0:00:00 0.0% syseventd/15

 17265 root     3296K 1064K sleep   59    0   0:00:00 0.0% ssh-agent/1

PROJID    NPROC  SWAP   RSS MEMORY      TIME  CPU PROJECT

     1       62  309M  514M    25%   0:01:50 0.4% user.root

   100        2 2420K 5504K   0.3%   0:00:00 0.3% build

     0       48  208M  194M   9.5%   0:01:50 0.1% system

     3        2 1488K 4756K   0.2%   0:00:00 0.0% default

6.将运行的进程移至新任务

查看当前shell所在的project

-bash-3.00$ id -p

uid=65535(user) gid=1(other) projid=3(default)

用户从属的project

-bash-3.00$ projects

default build

创建进程。

-bash-3.00$ sleep 1200 &

[1] 29624

获得进程号。

-bash-3.00$ pgrep sleep

29624

创建新任务,并将进程29624放在该任务中。

-bash-3.00$ newtask -v -p build -c 29624

95

当前shell仍然在default project中。

-bash-3.00$ id -p

uid=65535(user) gid=1(other) projid=3(default)

-bash-3.00$ projects

default build

验证进程已经移至新的task中。

-bash-3.00$ pgrep -T 95

29624

7.改变项目的属性

如何向项目中添加属性值

 

可以使用带有 -a -K 选项的 projmod 命令将值添加到项目属性中。如果属性不存在,则会创建一个。

 

1).成为超级用户或承担等效角色。

2).在项目 myproject 中添加无属性值的资源控制属性 task.max-lwps。加入项目的任务只有系统属性值。

 

      # projmod -a -K task.max-lwps myproject

 

3).然后可以向 myproject 项目中的 task.max-lwps 添加值。此值包含权限级别、阈值以及与达到阈值关联的操作。

 

      # projmod -a -K "task.max-lwps=(priv,100,deny)" myproject

 

4).由于资源控制属性可以具有多个值,因此可以使用同一个选项将其他值添加到现有的值列表中。

 

      # 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)

 

1).成为超级用户或承担等效角色。

2).要从项目 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 命令。

 

1).成为超级用户或承担等效角色。

2).从项目 myproject 中删除属性 task.max-lwps 及其所有值:

 

      # projmod -r -K task.max-lwps myproject

 

 

如何替换项目的属性和属性值

 

要替换项目 myproject 中属性 task.max-lwps 的值,请使用带有 -s -K 选项的 projmod 命令。如果属性不存在,则会创建一个。

 

1.成为超级用户或承担等效角色。

2.使用所示的新值替换当前的 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)

 

如何删除资源控制属性的现有值

 

1).成为超级用户或承担等效角色。

2).要从项目 myproject 中删除 task.max-lwps 的当前值,请键入:

 

      # projmod -s -K task.max-lwps myproject